UE4C++学习篇(五)---UPROPERTY和组件实例化

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);
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡西莫多说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值