UE5中使用c++為Actor運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建Component和ChildActor

如何在運(yùn)行時(shí)為Actor創(chuàng)建組件,網(wǎng)絡(luò)中搜索有2種方式,一種是在構(gòu)造函數(shù)中進(jìn)行,本文主要講述另外一種不在構(gòu)造函數(shù)中使用CreateDefaultSubobject創(chuàng)建的方式
通過(guò)網(wǎng)絡(luò)搜索,會(huì)得到如下的代碼,可以在非構(gòu)造函數(shù)中創(chuàng)建組件,比如通過(guò)按鈕觸發(fā),或者在BeginPlay函數(shù)中創(chuàng)建
但是測(cè)試之后,發(fā)現(xiàn)組件并沒(méi)有正確被創(chuàng)建出來(lái),經(jīng)過(guò)筆者的測(cè)試,使用如下的方式可以正確的在運(yùn)行時(shí)動(dòng)態(tài)的給Actor添加上Component,筆者測(cè)試的引擎版本是UE5.2.1
給Actor動(dòng)態(tài)增加一個(gè)StaticMeshComponent
首先我們先創(chuàng)建一個(gè)c++的類(lèi)MyTest,創(chuàng)建完成后,2個(gè)文件如下所示,你們的代碼文件會(huì)因?yàn)轫?xiàng)目名稱(chēng)跟我不一樣而有區(qū)別,主要就是TestProject_API會(huì)變成你的項(xiàng)目名字加_API
MyTest.h
MyTest.cpp
首先給MyTest.cpp文件增加一個(gè)引用,因?yàn)闀?huì)使用到構(gòu)造Transform的方法
給MyTest.h中增加一個(gè)屬性,用于我們方便的指定一個(gè)靜態(tài)網(wǎng)格體資源
這次我們?cè)贐eginPlay()函數(shù)中增加組件
這樣我們就完成了動(dòng)態(tài)的增加組件,編譯后在UE5中指定靜態(tài)網(wǎng)格體資源之后就可以運(yùn)行了,做法如下,在UE的C++ Classes路徑下面,找到我們創(chuàng)建的C++類(lèi),右鍵選擇創(chuàng)建藍(lán)圖

打開(kāi)藍(lán)圖,選擇靜態(tài)網(wǎng)格體資源,將我們創(chuàng)建的藍(lán)圖拖拽到場(chǎng)景中,運(yùn)行即可看到靜態(tài)網(wǎng)格體組件被創(chuàng)建出來(lái)了

給Actor動(dòng)態(tài)增加一個(gè)ChildActor
原理和增加組件是一樣的,增加一個(gè)ChildActorComponent,再設(shè)置ChildActorClass,我們直接上代碼
給MyTest.h中增加一個(gè)屬性,用于我們方便的指定子對(duì)象的藍(lán)圖資源
在BeginPlay()函數(shù)中增加組件
最終的代碼結(jié)果
MyTest.h
MyTest.cpp