如何通过json文件修改打包后的DataTable数据

原理

先通过FFileHelper::LoadFileToString获取json数据
再通过UDataTable::CreateTableFromJSONString改变DataTable的数据

实现步骤

创建一个类继承自UBlueprintFunctionLibrary

继承这个类可以新建静态函数在任意蓝图中直接调用

头文件

UCLASS()
class MISSILEUI_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()

public:
	UFUNCTION(BlueprintCallable, DisplayName = "FillDataTablefromJSONFile", Category = "DataTable")
		static bool FillDataTableFromJSONFile(UDataTable* DataTable, FString JSONFilePath);
};

cpp文件

bool UMyBlueprintFunctionLibrary::FillDataTableFromJSONFile(UDataTable * DataTable, FString JSONFilePath)
{
	if (!DataTable)return false;

	FString JSONString;
	//这里是获取路径
	JSONFilePath = FPaths::ProjectContentDir() + JSONFilePath;
	//这里判断文件是否存在,如果存在则读取文件数据到JSONString
	if (FPlatformFileManager::Get().GetPlatformFile().FileExists(*JSONFilePath))
	{
		FFileHelper::LoadFileToString(JSONString, *JSONFilePath);
	}
	else
	{
		GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Red, FString::Printf(TEXT("FillDataTableFromJSONString -> Can't fill DataTable with JSONString: %s"), *JSONFilePath));
		return false;
	}

	//根据JSONString覆盖掉原有的Datatable数据
	TArray<FString> Errors = DataTable->CreateTableFromJSONString(JSONString);
	if (Errors.Num())
	{
		for (const FString& Error : Errors)
		{
			GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Red, FString::Printf(TEXT("%s"), *Error));
		}
		return false;
	}
	return true;
}

创建一个结构体继承自FTableRowBase

  • 例如
USTRUCT(BlueprintType)
struct FMyData : public FTableRowBase
{
	GENERATED_USTRUCT_BODY()
	UPROPERTY(BlueprintReadWrite, EditAnywhere)
		FString Name;

	UPROPERTY(BlueprintReadWrite, EditAnywhere)
		TArray<FString> User;

	UPROPERTY(BlueprintReadWrite, EditAnywhere)
		TArray<FString> TreeData;

	UPROPERTY(BlueprintReadWrite, EditAnywhere)
		TArray<FString> ChangeText;
};

必须要有一个Name变量,这个Name其实就是RowName
创建好之后记得在UE4中创建一个这个结构的DataTable

创建Json文件

注意要跟上面创建的那个结构体一一对应,少一个多一个或者名字打错都会报错

[
    {
        "Name": "0",
        "User": [
            "1111:222",
            "1111:333"
        ],
        "TreeData": [
            "一级,二级1-1,二级1-2",
            "一级2,二级2-1,二级2-2",
            "一级3,二级3-1,二级3-2",
            "一级4,二级4-1,二级4-2",
            "一级5,二级5-1,二级5-2"
        ],
        "ChangeText": [
            "hahahahhaha"
        ]
    }
]

最后的蓝图调用

调用很简单这里就不截图了,需要传入两个参数
第一个是要被覆盖的DataTable,注意这个DataTable的结构一定要跟Json中的结构一致
第二个是Json文件路径,填入相对路径,如./DataFile/datafile.json

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值