您的位置:

UE4中的DataTable

一、UE4DataTable概述

UE4中的DataTable是一个非常有用的工具,它允许您定义和管理各种数据,这些数据可以被其他系统使用。DataTable可以存储任何类型的数据,包括字符串,整数,浮点数等等。您可以使用UE4编辑器或代码来创建DataTable,也可以从CSV文件导入。DataTable可以用作蓝图和代码中的数据源,比如说用来存储技能数据或者NPC的信息。

二、创建DataTable

在UE4中,您可以使用UE4的编辑器或者代码创建DataTable。以下是使用UE4编辑器的方法:

1. 打开您的项目,并选择“内容浏览器”窗口中的任何文件夹。

2. 选择“针对这个文件夹向新目录”旁边的下拉菜单,并选择“DataTable”选项。

3. 选择一个唯一的名称并单击“创建”按钮。

4. 右键点击您的新创建的DataTable并选择“编辑”。这将打开一个新的窗口,您可以在窗口中定义DataTable的结构以及添加行数据。

以下是使用代码创建DataTable的示例:
// 创建DataTable实例
UDataTable* MyDataTable = NewObject();

// 创建一个行结构体
UStruct* RowStruct = UStruct::CreateEmpty();

// 添加两个属性到结构体
FStructProperty* Property1 = FStructProperty::Create(RowStruct, TEXT("Property1"), EPropertyFlags::CPF_Edit);

FStructProperty* Property2 = FStructProperty::Create(RowStruct, TEXT("Property2"), EPropertyFlags::CPF_Edit);

// 更新结构体
RowStruct->StaticLink(true);

// 设置行结构体
MyDataTable->RowStruct = RowStruct;

  

三、在DataTable中添加行数据

有了DataTable的结构或者类型定义后,接下来您需要添加数据。以下是示例代码:

// 获取DataTable并检查是否有效
UDataTable* MyDataTable = LoadObject(nullptr, TEXT("DataTable'/Game/Data/MyDataTable.MyDataTable'"));

if (MyDataTable)
{
    // 创建行数据实例
    FMyRowData MyRow;

    // 设置行数据
    MyRow.Property1 = FString(TEXT("Value"));
    MyRow.Property2 = 10;

    // 添加行数据
    MyDataTable->AddRow(TEXT("RowName"), MyRow);
}

  

四、结构体选取

UE4中的结构体选取是定义DataTable中行数据的非常常用的方法。结构体选取可以用来设计更复杂的数据结构,比如嵌套结构体。以下是结构体选取的示例:

// 定义一个结构体属性
FStructProperty* StructProperty = CastField(MyDataTable->RowStruct->FindPropertyByName(TEXT("Property1")));

// 获取结构体属性值
FMyRowData MyRowData = MyDataTable->GetRow
   (TEXT("RowName"));
FString PropertyValue = StructProperty->GetPropertyValue_InContainer(&MyRowData)->ToString();

   
  

五、从CSV文件中导入数据

导入CSV文件到DataTable可以帮您提高生产效率,特别是当数据非常大时。以下是从CSV文件中导入DataTable数据的示例:

// 打开CSV文件
FString FilePath = FString(TEXT("Data/MyData.csv"));
FString FileContent;
FFileHelper::LoadFileToString(FileContent, *FilePath);

// 将CSV文件解析为FDataTableImporterCSV类型
FDataTableImporterCSV DataTableImporterCSV(*FileContent);

// 导入数据到DataTable
MyDataTable->CreateTableFromCSVString(FileContent);

六、从DataTable导出数据

从DataTable中导出数据可以让您将数据放到一个易于处理的格式中,比如一个文本或者XML文件。以下是从DataTable导出数据的示例:

// 从DataTable中获取行数据
FMyRowData* RowData = MyDataTable->FindRow(TEXT("RowName"), FString(""), true);

// 使用JSON格式序列化行数据并保存到文件
FString JsonString;
FJsonObjectConverter::UStructToJsonObjectString(RowData, JsonString);
FString FilePath = FString(TEXT("Data/MyData.json"));
FFileHelper::SaveStringToFile(JsonString, *FilePath);

  

七、总结

UE4中的DataTable是一个非常有用的工具,它可以帮您管理和存储各种数据,包括结构体,整数,浮点数等等。它还提供了从CSV文件导入和导出数据,使您更加高效地进行游戏开发。使用DataTable可以帮助您更好地管理游戏数据,从而提高游戏制作的生产效率。