Unreal Cook Book:創建對象的的幾種姿勢(C++)

DEMO源代碼

這個DEMO演示了在C++代碼中,創建UE4的常見類型的對象,包括Actor,ActorComponent,加載資源等。

源代碼請從這裏下載:https://github.com/neil3d/UnrealCookBook

使用的引擎版本爲:4.11.2

打開項目後,啓動“CreateObjectDemo/CreateObjectDemoMap.umap”地圖文件即可運行。

 

創建組件

在UE4中,爲Actor創建組件,可以使用UObject::CreateDefaultSubobject()模板函數,這個函數只能在構造函數中調用。如下所示:

/* <CreateObjectDemo>
	* 創建Component對象,要使用CreateDefaultSubobject模板函數
	*/
	MyComponent = CreateDefaultSubobject<UMyActorComponent>(TEXT("MyComponent"));

 

加載資源對象

在UE4中,項目中的所有資源文件,不要看做是文件,而要理解爲“靜態對象”:也就是對象序列化的產物。加載項目資源可以使用“UObject::StaticLoadObject()”函數,其中重要的參數爲對象的Name,而不是文件路徑。UE底層提供文件讀取功能,無論資源文件是存儲我獨立的.uasset文件,還是存儲到.PAK文件中,對於上層都不需要關心。

/* <CreateObjectDemo>
	* 加載模型、貼圖等對象,使用StaticLoadObject函數
	*/
	UStaticMesh* SM_Vase = Cast<UStaticMesh>(StaticLoadObject(UStaticMesh::StaticClass(),
		NULL,
		TEXT("/Game/Assets/StaticMeshes/SM_Vase"))
		);

	StaticMeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMeshComponent"));
	StaticMeshComponent->SetStaticMesh(SM_Vase);

 

創建Actor對象

創建Actor對象,需要使用UWorld::SpawnActor()接口,如下所示:

/* <CreateObjectDemo>
	 * 創建AActor派生類對象不要用NewObject或者new,而要用UWorld::SpawnActor()
	*/
	UWorld* World = GetWorld();
	FVector pos(150, 0, 20);

	AMyActor* MyActor = World->SpawnActor<AMyActor>(pos, FRotator::ZeroRotator);

 

創建UObject對象

如果你有UObject的派生類(非Actor、非ActorComponent),那你可以使用NewObject()模板函數來創建其實例對象。

	/* <CreateObjectDemo>
	 * 使用NewObject模板函數,來創建UObject派生類對象
	*/
	MyObject = NewObject<UMyObject>();


 

發佈了67 篇原創文章 · 獲贊 280 · 訪問量 73萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章