【UE4】加載資源的方式(三)使用ConstructorHelpers來加載
參考資料&原文鏈接
[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
,因為AMyCharacter
是BP_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));
}
ConstructorHelpers
有FObjectFinder
和FClassFinder
兩種方法,通過Name(完整路徑)分別找到Object或Class,它們的用法相似,不再贅述。
特點
- 同樣是需要完整路徑的一種加載方式。
- 只能在構造函數里面使用,非構造函數中使用會引起Error。這適用於某些情況,例如要使用這個資源的時候必須加載另一種資源,這個時候就可以考慮在構造函數中使用ConstructorHelpers。
本文標簽
游戲開發
、游戲開發基礎
、Unreal Engine
、UE資源加載
。