十二、藍(lán)圖與C++:實(shí)例化Actor與UObject
一.藍(lán)圖中實(shí)例化藍(lán)圖Actor

1.創(chuàng)建一個(gè)將要實(shí)例化的Actor命名BP_Actor,添加一個(gè)靜態(tài)網(wǎng)格體組件

2.創(chuàng)建一個(gè)藍(lán)圖類(lèi):BP_SpawnActor,用來(lái)實(shí)例化BP_Actor

二.C++中實(shí)例化藍(lán)圖Actor

1.新建一個(gè)基于A(yíng)ctor的C++類(lèi):Cpp_SpawnActor
.cpp文件
解析:
①LoadClass:因?yàn)镃++無(wú)法直接識(shí)別藍(lán)圖類(lèi),所以需要使用LoadClass將藍(lán)圖類(lèi)的類(lèi)型加載出來(lái).使用語(yǔ)法:
LoadClass<基類(lèi)類(lèi)型(可以直接用AActor)>(NULL,資源引用);
資源引用獲取方式在上篇中講過(guò)了,這里要注意的是:需要在資源引用后面加一個(gè)"_C",否則藍(lán)圖類(lèi)型無(wú)法被正常加載.
②GetWorld:這個(gè)很好理解,想要在世界中生成對(duì)象,總要先確定是在哪個(gè)世界生成.
③SpawnActor:這個(gè)函數(shù)有很多重載,上圖是其中一種用法,語(yǔ)法為:
SpawnActor<類(lèi)型>(確切類(lèi)型,Transform));
類(lèi)型:必須是C++可識(shí)別的,藍(lán)圖類(lèi)可以直接用AActor
確切類(lèi)型:通過(guò)LoadClass加載出來(lái)的類(lèi)型
Transform:rotation,location,scale等信息
與藍(lán)圖對(duì)應(yīng)關(guān)系如下:

三.C++中實(shí)例化C++類(lèi)
上篇我們創(chuàng)建了一個(gè)C++的類(lèi):Cpp_AddComponent,用來(lái)Spawn這個(gè)C++類(lèi)

.Cpp文件
解析:
①因?yàn)镃++可以直接識(shí)別C++類(lèi)(ACpp_AddComponent),所以就不用LoadClass了,尖括號(hào)中可以直接寫(xiě)入該類(lèi)型
②C++類(lèi)獲取類(lèi)型很簡(jiǎn)單,無(wú)需加載,直接類(lèi)名::StaticClass()即可獲得
?四.C++中實(shí)例化不確定類(lèi)型的藍(lán)圖Actor
在目錄二中我們直接用C++Spawn出一個(gè)BP_Actor的藍(lán)圖類(lèi),假如我們不固定這個(gè)藍(lán)圖類(lèi)該怎么辦呢?想要生成任意actor類(lèi)型,這就要求生成的類(lèi)型不能寫(xiě)死,我們可以使用TSubclassof來(lái)實(shí)現(xiàn)

.h文件

.cpp文件

解析:
用法:TSubclassOf<基類(lèi)類(lèi)型>變量名;?
?五.藍(lán)圖中實(shí)例化UObject
在藍(lán)圖中我們實(shí)例化最多的UObject其實(shí)就是UserWidget(基類(lèi)為UObject),藍(lán)圖中的CreateWidget節(jié)點(diǎn)在指定要生成的Widget類(lèi)型之前,節(jié)點(diǎn)名稱(chēng)為Construct NONE?

創(chuàng)建一個(gè)基類(lèi)為object的藍(lán)圖類(lèi):BP_Object

解析:
①Outer表示該Object的所有者,需要連入一個(gè)UObject或者Actor,否則會(huì)報(bào)錯(cuò)
②CreateWidget其實(shí)就是ConstructObjectFromClass的一個(gè)特殊版本,多了一個(gè)篩選功能,只會(huì)顯示UserWidget類(lèi)型
六.C++中實(shí)例化UObject
C++中實(shí)例化UObject非常類(lèi)似于原生C++中的new關(guān)鍵字,不過(guò)由于UE有自己的一套內(nèi)存管理機(jī)制,所以不能使用new關(guān)鍵字來(lái)實(shí)例化UObject對(duì)象.我們需要通過(guò)NewObject關(guān)鍵字實(shí)例化UObject對(duì)象
1.創(chuàng)建一個(gè)基類(lèi)為Object的C++類(lèi):Cpp_Uobject



2.在C++中實(shí)例化UObject:Cpp_Uobject

解析:
NewObject是一個(gè)模板函數(shù),語(yǔ)法格式為:
Type* Obj=NewObject<Type>();
NewObject有多個(gè)重載,一般使用上面這個(gè)無(wú)參數(shù)的版本即可.