[UE] C++ エディター上でDataTableの設定を構造体の型を限定するには

RequiredAssetDataTags RowStructure
DataTableの構造体型のフィルタリングが出来ちゃいます。

UPROPERTY
(
    EditAnywhere, 
    meta = (RequiredAssetDataTags = "RowStructure=/Script/[モジュール名].[F抜き構造体名]")
)
TObjectPtr<UDataTable> TestDataTable;

実際に試してみよう

USTRUCT(BlueprintType)
struct FTestDataTableStruct0 : public FTableRowBase
{
    GENERATED_BODY()

public:

    int32 testValue = 0;
};

USTRUCT(BlueprintType)
struct FTestDataTableStruct1 : public FTableRowBase
{
    GENERATED_BODY()

public:

    int32 testValue = 0;
};

UCLASS()
class ATestDataTableActor : public AActor
{
    GENERATED_BODY()

public:

    UPROPERTY
    (
        EditAnywhere, 
        meta = 
        (
        RequiredAssetDataTags = "RowStructure=/Script/TestBlog.TestDataTableStruct0"
        )
    )
    TObjectPtr<UDataTable> TestDataTable;

};

FTestDataTableStruct0 FTestDataTableStruct1
TObjectPtr<UDataTable>の変数を持つATestDataTableActorを用意

今回はTestBlogというプロジェクト名で用意しています。
ATestDataTableActor があるモジュール名もそのままTestBlog

BPとそれぞれの構造体を設定したDataTableを用意

TestDataTableを設定しようとすると、
FTestDataTableStruct0 の型が設定されたDataTableしか出てきません!
なんとまあ便利!

参考文献

  • SPropertyEditorAsset.cppの bool SPropertyEditorAsset::IsAssetFiltered(const FAssetData& InAssetData)
  • Class.cppの CheckIfMetaDataValueIsShortTypeName()