執筆バージョン: Unreal Engine 5.5
|
こんにちは。
今回はEUWで使用できる「Details View」へ変数の型から変数名を求めて設定する方法をご紹介します。
「EUWで表示したい変数の型は決まっているけど、変数名やカテゴリーはバラバラ」といった状況で役に立つかと思います。
前提
EUWやDetails Viewについて基本的な知識はあることを前提に進めていきます。
以下にて基本的な使用方法について解説していますのでご参照ください。
[UE5] Editor Utility Widget でファイル選択ダイアログを利用する
また、本記事ではC++のコードを作成します。
ソースコード対応のプロジェクトをご用意ください。
実装
0. おおまかな流れ
- EUWを作成
- 型から変数名を取得する関数を作成(C++)
- Details Viewへ設定
1. EUWを作成
土台となるEUWを作成していきます。

コンテンツブラウザでEUWを作成したらDetailsViewを配置します。

Graphの方へ行き処理を記述していきます。
下図のように「Level Editor Subsystem」を取得して呼び出した「Get Selection Set」ノードの戻り値から「OnSelectionChange」をバインドします。
これでレベルエディタ上でオブジェクトを選択するたびに「OnSelectionChange_Event」が発火するようになりました。

次に選択中のオブジェクトを取得する「Get Selection Set」ノードを追加します。
(ややこしいですが「Level Editor Subsystem」からのノードとは別のものです)
今回は単体を想定しているためインデックス0のオブジェクトのみ取得しています。

一旦EUWでの作業は完了です。
2. 型から変数名を取得する関数を作成(C++)
新しくC++ファイルを作成します。
今回はBlueprintFunctionLibraryで作成しています。

以下のコードを記述してコンパイルを行ってください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
// MyBlueprintFunctionLibrary.h #pragma once #include "CoreMinimal.h" #include "Kismet/BlueprintFunctionLibrary.h" #include "MyBlueprintFunctionLibrary.generated.h" /** * */ UCLASS() class FORBLOG_20250620_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary { GENERATED_BODY() public: UFUNCTION(BlueprintPure) static void GetPropertysByType(UObject* Target, const FName TypeName, TArray& properties); }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
// MyBlueprintFunctionLibrary.cpp #include "MyBlueprintFunctionLibrary.h" void UMyBlueprintFunctionLibrary::GetPropertysByType(UObject* Target, const FName TypeName, TArray& properties) { TArray props; props.Empty(); if (Target) { for (TFieldIterator prop(Target->GetClass()); prop; ++prop) { if (prop->GetCPPType() == TypeName) { props.Add(FName(prop->GetName())); } } } properties = props; } |
簡単に解説しますと、
引数として渡したオブジェクト(Target)の全てのプロパティを指定した型(TypeName)と比較し、
同一であれば配列に追加して出力(propeties)、といった処理になっています。
“GetCPPType()”でプロパティの型がString型で取得でき、”GetName()”でプロパティ名が取得できます。
3. Details Viewへ設定
取得した変数名をDetailsViewに設定します。
作成した関数をEUWで呼び出し、引数として選択中のオブジェクトリファレンスと取得したい変数の型を指定します。

戻り値として指定した型の変数名が配列で返ってくるのでDetailsViewへ設定します。
DetailsViewのPropertiesToShowプロパティへ値を渡すためのノードはないためSet Editor Propertyで「PropertiesToShow」を指定して設定します。
(PropertiesToShowプロパティはName型の配列のため、String型の配列だと設定されません)

変数名を設定した”後に”、Set ObjectでDetailsViewに選択中のオブジェクトをセットします。

これで実装は完了です。
EUWを起動してレベルエディタ上でオブジェクトを選択すると、指定した型の変数だけが表示されます。
(動作確認のためBP_ThirdPersonCharacterにTestという名前のBool型変数を追加しています)

まとめ
- DetailsViewで特定の変数を指定するには変数名かカテゴリーが定まっていないといけない
- そのため型から変数名を取得できる関数を作っておくと柔軟性が上がる
- 変数型の取得はBPだと難しいためC++で関数を作成する必要がある
- DeailsViewへの設定はSet Editor Propertyで行い、Set Objectの前でないと設定が反映されないことに注意
- 今回の実装では自身がオブジェクトに追加した変数のみが対象となる
おすすめの使い方としては、構造体を作成してそれを指定する使い方です。
構造体であれば目的の変数以外が取得されてしまうことが減るかと思います。
非常にニッチな需要ではあると思いますが、本記事がお役に立てれば幸いです。