UCLASS:通知虚幻引擎要对一个类对象进行反射,注意:只有继承自UObject的类才可以进行反射。
通过填入多个参数来描述当前类对象在虚幻引擎中的反射方式
BlueprintType:告知虚幻引擎在其他的蓝图里面把这个类当作一个变量来使用;
Blueprintable:告知虚幻引擎创建的蓝图可以通过继承此类创建一个新的蓝图对象;
UPROPERTY:针对存在UCLASS和USTRUCT这样的反射对象,可以进行反射对象中的成员变量;
注意:只能反射虚幻引擎当前支持的类型的成员变量。必须被BlueprintType标注过的才可以反射;
使用格式:UPROPERTY(针对UI的显示方式,针对蓝图使用标识,Category = "分组",Meta = (单元化特点))
meta单元化特点:可以限定多个,DisplayName = "显示用的名字",ClampMin = 1,ClampMax = 20:限定变量可取值范围;等
UPROPERTY定义公开型的蓝图可见属性,用于成员变量
BlueprintReadWrite:蓝图内可进行get和set操作
BlueprintReadOnly:蓝图内只能进行get操作
EditAnywhere:可通过属性窗口在原型和实例上进行编辑
VisibleAnywhere:此属性在所有属性窗口中可见,但无法被编辑
EditDefaultsOnly:此属性可通过属性窗口进行编辑,但只能在原型上进行
VisibleDefaultsOnly:此属性只在原型的属性窗口中可见,无法被编辑
EditInstanceOnly:此属性可通过属性窗口进行编辑,但只能在实例上进行,不能在原型上进行
VisibleInstanceOnly:此属性只在实例的属性窗口中可见(在原型属性窗口中不可见),无法被编辑
例如:
UPROPERTY(VisibleAnywhere,BlueprintReadOnly,Category = "Components",meta = (AllowPrivateAccess = "true"))
UStaticMeshComponent* MeshComp;
UPROPERTY(VisibleAnywhere,BlueprintReadOnly,Category = "Components",meta = (AllowPrivateAccess = "true"))
USphereComponent* SphereComp;
UPROPERTY(VisibleAnywhere,BlueprintReadOnly,Category = "Components",meta = (AllowPrivateAccess = "true"))
UParticleSystemComponent* ParticleSysComp;
组件实例化,设置层级关系,设置部分属性,查找路径资源并赋值:
//球型碰撞组件
SphereComp = CreateDefaultSubobject<USphereComponent>(TEXT("SphereComp"));
RootComponent = SphereComp;
SphereComp->SetSphereRadius(32.0f);
//碰撞设置,仅有Pawn可以进行响应
SphereComp->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
SphereComp->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore);
SphereComp->SetCollisionResponseToChannel(ECollisionChannel::ECC_Pawn, ECollisionResponse::ECR_Overlap);
//模型组件,设置默认模型
MeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComp"));
MeshComp->SetupAttachment(SphereComp);
MeshComp->SetCollisionEnabled(ECollisionEnabled::NoCollision);
static ConstructorHelpers::FObjectFinder<UStaticMesh> MeshAsset(TEXT("StaticMesh'/Game/StarterContent/Shapes/Shape_Sphere.Shape_Sphere'"));
if (MeshAsset.Succeeded())
{
MeshComp->SetRelativeLocation(FVector(0.0f,0.0f,-22.0f));
MeshComp->SetRelativeScale3D(FVector(0.5f));
MeshComp->SetStaticMesh(MeshAsset.Object);
}
//粒子系统组件,设置默认粒子效果
ParticleSysComp = CreateDefaultSubobject<UParticleSystemComponent>(TEXT("ParticleSysComp"));
ParticleSysComp->SetupAttachment(SphereComp);
static ConstructorHelpers::FObjectFinder<UParticleSystem> ParticleSystemAsset(TEXT("ParticleSystem'/Game/StarterContent/Particles/P_Fire.P_Fire'"));
if (ParticleSystemAsset.Succeeded())
{
ParticleSysComp->bAutoActivate = true;
ParticleSysComp->SetTemplate(ParticleSystemAsset.Object);
}