LoginSignup
2
1

More than 3 years have passed since last update.

【UE4】AssetRegistryなどでブループリントクラスを取得・作成する方法

Posted at

本題の主旨

ブループリント内で使用できる 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 クラス自体はブループリント非公開のクラスのため、ブループリント内ではアクセスできません。上記の関数ではその部分だけを記述しています。
渡されたブループリントアセットから内部で定義された実際のブループリントクラスを取り出し、それを返すだけです。

使い方は以下のような感じになります。
ss.jpg

AssetRegistry に限らず、アセットオブジェクトを取得する処理にこの関数を使うことが出来るので、意外と使える幅は広いと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1