c++ UnrealEngine 4-限制DataTable指针仅使用特定行结构

ccgok5k5  于 2023-02-17  发布在  其他
关注(0)|答案(2)|浏览(202)

我有两个结构体

USTRUCT(BlueprintType)
struct FLevelMapStruct : public FTableRowBase
{
    GENERATED_USTRUCT_BODY()

public:

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 LocationX;

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 LocationY;

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    TSubclassOf<ATile> TileType;
};

USTRUCT(BlueprintType)
struct FLevelStruct : public FTableRowBase
{
    GENERATED_USTRUCT_BODY()

public:

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    UDataTable* MapTable;
};

我想允许使用行结构FLevelStruct创建的蓝图数据表只能在字段MapTable中使用使用FLevelMapStruct行结构创建的数据表。
有人能给我指出正确的方向吗?我该怎么做?
编辑:MapTable需要能够指向蓝图数据表

gab6jxml

gab6jxml1#

我自己也遇到过这个问题,我相信我有答案(至少对我来说是UE 4. 26)。我看到一些帖子没有答案,所以我想我应该分享我的解决方案。
UPROPERTY宏中添加meta=(RequiredAssetDataTags = "RowStructure=*YoureRowTypeHere*")
所以在你的例子中

UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(RequiredAssetDataTags = "RowStructure=LevelMapStruct"))
UDataTable* MapTable;

请注意,F不包含在RowStructure的名称中,因此使用LevelMapStruct而不是FLevelMapStruct
现在在编辑器中,你的属性应该只列出使用该类型的表。

tjjdgumg

tjjdgumg2#

对于使用虚幻5.1的自定义类,我使用以下代码:

UPROPERTY(meta = (RequiredAssetDataTags = "RowStructure=/Script/MyProject.MyData"))
UDataTable* database = nullptr;

UPROPERTY(EditAnywhere, BlueprintReadOnly, meta = (RowType = "/Script/MyProject.MyData"))
FDataTableRowHandle rowIntoDatabase;

UPROPERTY(EditAnywhere, BlueprintReadOnly, meta = (RowType = "/Script/MyProject.MyData"))
TArray<FDataTableRowHandle> someRowIntoDatabase;

同样的评论:请注意,F不包含在RowStructure的名称中,因此使用MyData而不是FMyData
这是USTRUCT内部的工作,我用它创建了我的数据表。

相关问题