C++ で作った DataTable 構造体には FDataTableRowHandle
という便利な機能があります。
プロパティ編集時に DataTable のアセット指定と RowName を選択する UI が生成されます。
RowName
を指定してデータを取得する
USTRUCT( BlueprintType )
struct FHogeDataTableRow : public FTableRowBase
{
GENERATED_BODY()
UPROPERTY(EditDefaultsOnly)
int32 Hoge = 0;
};
FTableRowBase
を継承した FHogeDataTableRow
を作って、
UPROPERTY( EditDefaultsOnly, meta = ( RowType = "/Script/[ModuleName].HogeDataTableRow" ) )
FDataTableRowHandle RowHandle;
UPROPERTY.meta
に RowType
を指定します。
const auto* FoundRow = RowHandle.GetRow<FHogeDataTableRow>( ANSI_TO_TCHAR( __FUNCTION__ ) );
if ( !FoundRow )
{
UE_LOG( LogTemp, Warning, TEXT( "%s: not found!" ), *RowHandle.ToDebugString() );
}
GetRow
でデータを取得します。
引数の ContextString
には、用途が分かるような文字列を渡すとよいでしょう。
ANSI_TO_TCHAR
は文字化けを防ぐために追加してます。
めんどくさいのでいい方法ないかなぁ。。。
おまけ
FDataTableCategoryHandle
も使いたかった
列名 ColumnName
から値 RowContents
に一致した複数行を取得する構造体。
RowContents には文字列以外の型も指定できる。
HogeName
の列に対して値が Category1
の行を取得する。
この場合は NewRow_1
NewRow_2
が取得できる。
TArray<FHogeDataTableRow*> FoundRows;
CategoryHandle.GetRows<FHogeDataTableRow>( FoundRows, ANSI_TO_TCHAR( __FUNCTION__ ) );
手元の UE5.3 Preview では、エディタの言語設定が日本語だとクラッシュします。
英語だと問題なし。
DataTable 以外なら GetOptions
も便利
UPROPERTY(meta=(GetOptions="GetTestOptions"))
FString Test;
UFUNCTION()
TArray<FString> GetTestOptions() const
{
return { "A", "B", "C" };
}
UFUNCTION 定義の関数名を指定すれば OK。