5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UnrealC++でクラスのデフォルトオブジェクトを取得する

Last updated at Posted at 2020-05-09

#はじめに
1.PNG

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;
}

#おわりに
なかなかマイナーなケースかもしれませんが、こちらの記事がお役に立てれば幸いです。

5
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
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?