エディター上で配列の要素の横に文字列を表示する

どうもこんにちは
初投稿で至らないこともあると思いますがよろしくお願いします。

エンジンのバージョンは4.24.3です。
今回実現したいことはエディター上の配列の概要を展開前に表示させることです。

f:id:TakahashiMichael:20200530183720p:plain

UE4エディター上で配列の要素を展開しないと中身の情報がわからない...

f:id:TakahashiMichael:20200530185816p:plain
上記のように配列を展開すると中の情報が見れるのですが、
展開するまでは要素数しか表示されていない状態です。

もし要素が大量に増えてしまったとき一つ一つ展開して中を確認するのは非常に面倒です。
f:id:TakahashiMichael:20200530190047p:plain

そこで

f:id:TakahashiMichael:20200530183504p:plain

↑meta指定子の[TitleProperty]を使用すると展開前に中身の情報を知ることができるようになります。

こちらの表示方法について記述します。



まずはC++で公開エディター上に公開する配列と
配列の型として使用する構造体を定義します。

UENUM()
enum class EMyCharacterType : uint8
{
	Tom     UMETA(DisplayName = "トム"),
	Jenny   UMETA(DisplayName = "ジェニー"),
	Otsuka  UMETA(DisplayName = "大塚"),
	MAX     UMETA(Hidden),
};

USTRUCT()
struct FMyCharacter
{
	GENERATED_BODY()
	FMyCharacter()
		: type (EMyCharacterType::Tom)
		, HP   (0.0f)
	{
	}
	UPROPERTY(EditAnywhere)
		EMyCharacterType    type;
	UPROPERTY(EditAnywhere)
		float               HP;
};

UCLASS()
class MYPROJECT13_API AMyActor : public AActor
{
	GENERATED_BODY()
public:	
	UPROPERTY(EditAnywhere)
		TArray<FMyCharacter> characterList;
};

こちらで実行しアクターをレベルに配置してエディターからcharacterListを閲覧してみましょう。
このままでは冒頭に述べたように要素を展開するまで中身がわからない状態です。

そこでcharacterListのUPROPERTY指定子に[TitleProperty]メタデータ指定子を使用します。

UPROPERTYを以下のように変更します。

	UPROPERTY(EditAnywhere, meta = (TitleProperty = "type"))
		TArray<FMyCharacter> characterList;

するとエディター上では選択した変数の値を要素の概要として表示してくれるようになります。
f:id:TakahashiMichael:20200530183504p:plain

※[TitleProperty]に指定できるのは構造体内のUPROPERTY変数名。


特にデータテーブル等で大量に配列の要素が増える場合に役に立ちそうです。


TitlePropertyで使用が確認できた変数の型

  • int
  • float
  • FName
  • FString
  • enum class(UEnum付)
  • TArray:(要素1,要素2,要素3)のように羅列される

TitlePropertyの反映条件

  • UPROPERTY指定子が使用されている
  • VisibleAnywhere等少なくともエディタから見えるように設定されている


他メモ

  • キャストはできない

 例) TitleProperty = "(int)enum value" や TitleProperty = "(enum class)int value"のようにキャストはできなかった。


こちらを参考にさせていただきました。


閲覧していただきありがとうございます。