概要
設定データやプリセットデータなど、アクター側でデータテーブルの項目を選択させたい場面は多い。
データテーブルの項目名(RowName)はFName型のため、アクター側にはEditAnywhereなFNameを置いて入力する形式にすると、誤字などのヒューマンエラーの温床になりかねない。
そこで本記事ではDataTableの項目名をドロップダウンメニューで選択できるようにする簡単な方法をまとめる。
開発環境
UE5.1
VisualStadio2019
実装
使用するもの
プロパティ指定子"GetOptions"を使用する。
UPROPERTY(meta=(GetOptions="GetTestOptions"))
FString Test;
UFUNCTION()
TArray<FString> GetTestOptions() const
{
return { "A", "B", "C" };
}
この"GetOptions"という指定子を使うと、取得できた配列のデータをドロップダウンメニュー内に格納し、対象の変数で選択することができる。
実装例
// 対象とするデータテーブル.
UPROPERTY(EditAnywhere, Category="DT RowNameTest")
TObjectPtr<UDataTable> DataTable;
// データテーブルのRowを選択.
UPROPERTY(EditAnywhere, Category = "DT RowNameTest", meta=(GetOptions="GetRowNames"))
FName RowName;
// データテーブルのRowName取得関数.
UFUNCTION()
TArray<FName> GetRowNames() const;
TArray<FName> UMyClass::GetRowNames() const
{
TArray<FName> RowNames;
RowNames.Empty();
#if WITH_EDITOR
if (DataTable)
{
RowNames = DataTable->GetRowNames();
}
#endif
return RowNames;
}
すると簡単!
データテーブルに登録したRowNameがドロップダウンメニューで表示される。
まとめ
データテーブルの項目指定を手入力させている人、ちょっと待って!プロパティ指定子のGetOptionsを使えば簡単だよ!
ということで、ドロップダウンメニューを作るためプログラムの知識は少々必要だが、簡単に実装可能な方法をまとめた。
GetOptionsで呼び出す項目名の一覧取得関数自体は、ゲーム内で不要ならばプリプロセッサで弾いておくのがいいだろう。
ところで
ドロップダウンメニューって人によって呼び方が違うの、別に伝わるけどややこしいよね。
正しい呼び方を知っている人がいたら教えてください。
(セレクトボックス?コンボボックス?)