UE5中使用c++为Actor运行时动态创建Component和ChildActor

如何在运行时为Actor创建组件,网络中搜索有2种方式,一种是在构造函数中进行,本文主要讲述另外一种不在构造函数中使用CreateDefaultSubobject创建的方式
通过网络搜索,会得到如下的代码,可以在非构造函数中创建组件,比如通过按钮触发,或者在BeginPlay函数中创建
但是测试之后,发现组件并没有正确被创建出来,经过笔者的测试,使用如下的方式可以正确的在运行时动态的给Actor添加上Component,笔者测试的引擎版本是UE5.2.1
给Actor动态增加一个StaticMeshComponent
首先我们先创建一个c++的类MyTest,创建完成后,2个文件如下所示,你们的代码文件会因为项目名称跟我不一样而有区别,主要就是TestProject_API会变成你的项目名字加_API
MyTest.h
MyTest.cpp
首先给MyTest.cpp文件增加一个引用,因为会使用到构造Transform的方法
给MyTest.h中增加一个属性,用于我们方便的指定一个静态网格体资源
这次我们在BeginPlay()函数中增加组件
这样我们就完成了动态的增加组件,编译后在UE5中指定静态网格体资源之后就可以运行了,做法如下,在UE的C++ Classes路径下面,找到我们创建的C++类,右键选择创建蓝图

打开蓝图,选择静态网格体资源,将我们创建的蓝图拖拽到场景中,运行即可看到静态网格体组件被创建出来了

给Actor动态增加一个ChildActor
原理和增加组件是一样的,增加一个ChildActorComponent,再设置ChildActorClass,我们直接上代码
给MyTest.h中增加一个属性,用于我们方便的指定子对象的蓝图资源
在BeginPlay()函数中增加组件
最终的代码结果
MyTest.h
MyTest.cpp