Unreal Cook Book:建立物件的的幾種姿勢(C++)

燕良發表於2016-06-01

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>();


 

相關文章