DataTableの指定の行を取り出したいときに
通常
DataTatbleを指定 -> RowNameを検索 -> 要素を取り出す
という流れになりますが
その際の設定ミスを減らしたいと思い調べたものをまとめました。
DataTableをフィルタリング
EditorでDataTableを指定する際に以下のように書くとプロジェクト内すべてのDataTableが候補に出てきます。
UPROPERTY(EditDefaultsOnly) UDataTable* PlayerStatusDataTable;
指定の行のみを取り出すには
Unreal側に用意されているFDataTableRowHandle
を使用すると以下のようになります。
UPROPERTY(EditDefaultsOnly, meta = (RowType ="/Script/TESTProject.MyDataTable")) FDataTableRowHandle PlayerStatusData;
あとは以下のように書くと指定のRowの要素を取得することができます。
if(PlayerStatusData.IsNull()) { UE_LOG(LogTemp, Warning, TEXT("DataTableRowHandle is valid")); return; } FMyDataTable* MyDataTable = PlayerStatusData.GetRow<FMyDataTable>(FString("ContextText")); UE_LOG(LogTemp, Warning, TEXT("Name: %s"), *MyDataTable->Name);
これでデータを作成してもらう人に設定する際に
Rowの名前を文字列で指定する事がなくなるのでデータの設定ミスなどが防げるかと思います。
余談ですが
以下のような記述でDataTableを指定する部分のフィルタリングができないかと思いましたが
動作しないようでした.
DataTableはRowTypeを指定しているので記述方法はあっていると思うのですがなにか別の書き方があるのか…
UPROPERTY(EditDefaultsOnly, meta = (RowType = "/Script/TESTProject.MyDataTable")) UDataTable* EnemyAsset;