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()


