本題の主旨
ブループリント内で使用できる AssetRegistry で、任意のコンテンツディレクトリからアセットを取得することが可能ですが、この方法でブループリントクラスを取得したい場合に問題が発生します。
具体的に説明すると、 AssetRegistry は「アセットオブジェクト」を取得するため、ブループリントを取得するということは、「ブループリントアセット(UBlueprint クラス)」として取得されるということ。
これを解決する方法を紹介します。
UE4.24での内容です。
方法
やり方は(C++を使えば)簡単。
以下のようなブループリント公開関数を用意するだけです。
BlueprintUtilityLibrary.cpp
bool UBlueprintUtilityLibrary::GetClassFromBlueprintAsset(UObject *BlueprintAsset, UClass *&Class)
{
if (UBlueprint *BP = Cast<UBlueprint>(BlueprintAsset))
{
Class = BP->GeneratedClass;
return true;
}
return false;
}
UBlueprint クラス自体はブループリント非公開のクラスのため、ブループリント内ではアクセスできません。上記の関数ではその部分だけを記述しています。
渡されたブループリントアセットから内部で定義された実際のブループリントクラスを取り出し、それを返すだけです。
AssetRegistry に限らず、アセットオブジェクトを取得する処理にこの関数を使うことが出来るので、意外と使える幅は広いと思います。