虚幻4:C++ Actor增加Component

来源:互联网 发布:javascript 教程 pdf 编辑:程序博客网 时间:2024/05/18 00:19

测试1:

创建了继承自Actor的类,Spawn后没有rootcomponent,没有transform信息。

测试2:

发现rootcomponent为空。

CreateDefaultSubobject<USceneComponent>是否管用。

失败,这个函数只能在构造函数里面调用。

注释:不想在构造函数里增加Component,因为我想动态增加component;

测试3:

RootComponent = NewObject<USceneComponent>();
AddInstanceComponent(RootComponent);

失败

测试4:

ChildActorComponent = NewObject<UChildActorComponent>();
AddInstanceComponent(ChildActorComponent);

失败,连scenecomponent显示都没有了。

测试5:

DefaultRootComponent = NewObject<USceneComponent>();
AddInstanceComponent(DefaultRootComponent);

失败,同上。

测试6:

DefaultRootComponent = Cast<USceneComponent>( AddComponent("Root", true, FTransform(), NewObject<USceneComponent>()));
SetRootComponent(DefaultRootComponent);

失败,同上。

测试7:

尝试在构造函数里面添加ROOT,然后在其他函数里面Attach到root上面。

RootComponent= CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));

继承自Actor的rootcomponent可以显示,但是不能更改里面数值。尝试使用自己的变量:


定义:

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AItemInScene")
USceneComponent* DefaultRootComponent;

构造函数:

DefaultRootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));
SetRootComponent(DefaultRootComponent);

可以显示Root了,也能更改数值。

测试8:

尝试在root上增加component:

ChildActorComponent = NewObject<UChildActorComponent>();
ChildActorComponent->AttachTo(DefaultRootComponent);

失败,root下什么也没显示。

测试9:

是否是要AddComponent()

ChildActorComponent = NewObject<UChildActorComponent>();
AddInstanceComponent(ChildActorComponent);

失败,root下什么也没显示。

测试10:

ChildActorComponent = NewObject<UChildActorComponent>(this, "name", RF_NoFlags, nullptr, false, nullptr);
ChildActorComponent->AttachTo(DefaultRootComponent, "name", EAttachLocation::KeepRelativeOffset, false);

成功,我想应该是创建时候NewObject的参数问题。汗。。

测试11:

DefaultRootComponent = NewObject<USceneComponent>(this, "root", RF_NoFlags, nullptr, false, nullptr);
ChildActorComponent = NewObject<UChildActorComponent>(this, "name", RF_NoFlags, nullptr, false, nullptr);
ChildActorComponent->AttachTo(DefaultRootComponent, "name", EAttachLocation::KeepRelativeOffset, false);

成功。但是组件里面的参数不能改,而且没有在Actor显示出来,汗。。。


测试12:

DefaultRootComponent = NewObject<USceneComponent>(this, "root", RF_NoFlags, nullptr, false, nullptr);
ChildActorComponent = NewObject<UChildActorComponent>(this, "name", RF_NoFlags, nullptr, false, nullptr);
AddInstanceComponent(DefaultRootComponent);
AddInstanceComponent(ChildActorComponent);

成功,解决所有问题。


最后说一句,

StaticMeshComponent要想在世界中显示,要RegisterComponent

StaticMeshComponent->RegisterComponent();

2 0
原创粉丝点击