【UE4】加載資源的方式(三)使用ConstructorHelpers來加載


【UE4】加載資源的方式(三)使用ConstructorHelpers來加載

參考資料&原文鏈接

UE4資源加載方式

[UE4]C++靜態加載問題:ConstructorHelpers::FClassFinder和FObjectFinder

使用ConstructorHelpers來加載

使用特殊類 ConstructorHelpers 加載,這個類在構造階段查找某個對象的對象和類。

FObjectFinder()是對LoadObject()的封裝。但是FClassFinder()不是對LoadClass()的封裝,FClassFinder()內部調用的是LoadObject()。

在構造函數中,ConstructorHelpers 類將嘗試在內存中查找該資產,如果找不到,則進行加載。

請注意,使用資產的完整路徑來指定要加載的內容。如果該資產不存在或者由於出錯而無法加載,那么該屬性(下文的UnitSelector)將設置為 nullptr。

UPROPERTY 的聲明與前面的硬性引用示例相同。它們的工作方式相同,只不過是最初的設置方式有所差別。

注意:

  • ConstructorHelpers 只能在構造函數中使用。如果在非構造函數中使用的話,則會引起Crash(原因不明),在其代碼內部檢查了是否在構造函數中調用:CheckIfIsInConstructor(ObjectToFind);
  • ConstructorHelpers 前面必須加上static
  • 同樣的,代碼里面的AMyCharacter都可以換成AActor,只是個人更推薦寫AMyCharacter,因為AMyCharacterBP_MyCharacter的最直接的父類。

FClassFinder

聲明:

private:
	TSubclassOf<AMyCharacter> UnitSelectorClass;

在構造的時候加載:

UWC_TestUI::UWC_TestUI()
{
	static ConstructorHelpers::FClassFinder<AMyCharacter> UnitSelector(TEXT("Blueprint'/Game/Core/BP_MyCharacter.BP_MyCharacter_C'"));  
	UnitSelectorClass = UnitSelector.Class;
}

在想要使用的地方使用:

void UWC_TestUI::NativeConstruct()
{
	//UE_LOG(LogTemp,Warning,TEXT("UWC_TestUI:NativeConstruct"));
	Super::NativeConstruct();
	FVector Location(230.0,0,120);
	FRotator Rotation(0.0,0,0);
	MyCharacter = Cast<AMyCharacter>(GetWorld()->SpawnActor(UnitSelectorClass,&Location,&Rotation));
}

ConstructorHelpersFObjectFinderFClassFinder兩種方法,通過Name(完整路徑)分別找到Object或Class,它們的用法相似,不再贅述。

特點

  • 同樣是需要完整路徑的一種加載方式。
  • 只能在構造函數里面使用,非構造函數中使用會引起Error。這適用於某些情況,例如要使用這個資源的時候必須加載另一種資源,這個時候就可以考慮在構造函數中使用ConstructorHelpers。

本文標簽

游戲開發游戲開發基礎Unreal EngineUE資源加載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM