Blueprintではクラスのデフォルト値を取得するGetClassDefaults
とういうノードがあり、これを使うと文字通りそのクラスの変数のデフォルト値を取得することができます。
今回はこれをUnrealC++で行う方法をご紹介したいと思います。
#なにができるのか
UnrealC++でデフォルトオブジェクトを取得すると具体的にどんなことができるかですが、以下の通りです。
-
GetClassDefaults
ノードと同様にクラスのデフォルト値を取得できる - BPに公開されていないPublic変数のデフォルト値を取得できる
- クラスの静的ではない関数を呼び出せる(あんまり意味ないかも...)
具体的な使用例としてはRichTextのRichTextBlockImageDecoratorのようなクラスのデフォルト値を使用する目的のクラスを取り扱う際に便利です。
#ソースコード
####ActorクラスのHiddenInGameのデフォルト値を取得
Sample.cpp
bool SampleFunction(const TSubclassOf<AActor>& InClass)
{
UClass* Class = InClass.Get();
if (Class)
{
AActor* DefaultObject = Cast<AActor>(Class->GetDefaultObject());
if (DefaultObject)
{
return DefaultObject->bHidden;
}
}
return false;
}
####RichTextBlockImageDecoratorクラスからBrushを取得
Sample.cpp
bool URichTextFunctionLibrary::GetBrushFromImageDecoratorClass(const TSubclassOf<URichTextBlockImageDecorator>& InClass, FName TableID, FSlateBrush& Brush)
{
UClass* Class = InClass.Get();
if (Class)
{
URichTextBlockImageDecorator* DefaultObject = Cast<URichTextBlockImageDecorator>(Class->GetDefaultObject());
if (DefaultObject)
{
const FSlateBrush* BrushPtr = DefaultObject->FindImageBrush(TableID, false);
if (BrushPtr)
{
Brush = *BrushPtr;
return true;
}
}
}
return false;
}
#おわりに
なかなかマイナーなケースかもしれませんが、こちらの記事がお役に立てれば幸いです。