6
4

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 1 year has passed since last update.

[UE5]DataTableの項目をドロップダウンメニューで選ばせる

Last updated at Posted at 2023-07-04

概要

設定データやプリセットデータなど、アクター側でデータテーブルの項目を選択させたい場面は多い。
データテーブルの項目名(RowName)はFName型のため、アクター側にはEditAnywhereなFNameを置いて入力する形式にすると、誤字などのヒューマンエラーの温床になりかねない。
そこで本記事ではDataTableの項目名をドロップダウンメニューで選択できるようにする簡単な方法をまとめる。

開発環境

UE5.1
VisualStadio2019

実装

使用するもの

プロパティ指定子"GetOptions"を使用する。

GetOptionsの簡単使用例
UPROPERTY(meta=(GetOptions="GetTestOptions"))
FString Test;

UFUNCTION()
TArray<FString> GetTestOptions() const
{
    return { "A", "B", "C" };
}

この"GetOptions"という指定子を使うと、取得できた配列のデータをドロップダウンメニュー内に格納し、対象の変数で選択することができる。

実装例

MyFileName.h
// 対象とするデータテーブル.
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;
MyFileName.cpp
TArray<FName> UMyClass::GetRowNames() const
{
	TArray<FName> RowNames;
	RowNames.Empty();
#if WITH_EDITOR
	if (DataTable)
	{
		RowNames = DataTable->GetRowNames();
	}
#endif
	
	return RowNames;
}

テスト用に以下のようなデータテーブルを用意した。
DataTableのRows.png

用意したテーブル設定口に作成したデータテーブルを設定する。
DataTableの設定.png

すると簡単!
データテーブルに登録したRowNameがドロップダウンメニューで表示される。
DataTableのRowが出てくる.png

まとめ

データテーブルの項目指定を手入力させている人、ちょっと待って!プロパティ指定子のGetOptionsを使えば簡単だよ!
ということで、ドロップダウンメニューを作るためプログラムの知識は少々必要だが、簡単に実装可能な方法をまとめた。
GetOptionsで呼び出す項目名の一覧取得関数自体は、ゲーム内で不要ならばプリプロセッサで弾いておくのがいいだろう。

ところで

ドロップダウンメニューって人によって呼び方が違うの、別に伝わるけどややこしいよね。
正しい呼び方を知っている人がいたら教えてください。
(セレクトボックス?コンボボックス?)

6
4
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
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?