开发游戏时,经常会采用表格文件来存储游戏相关配置数,比如玩家的最大健康值、魔法值等,以及NPC的属性配置等。在Unreal下,无须自己编写表格文件的读取及解析代码,可以直接使用Unreal自带的读取表格数据功能。 下面通过一个简单示例来说明如何通过Unreal来读取CVS格式的表格数据。 表格数据示例如下:
注意,表格第一个单元格必须为空,第一行为每一列的名称,该行数据也是存取每一列数据的唯一标识。表格第一列代表行ID,获取某行数据时需要根据第一列的值标识某一行数据。
首先,创建一个Actor类,头文件中添加表格变量,程序通过该Actor对象来读取表格数据。代码如下: UCLASS() class CVSTABLE_API ATableRowSetting : public AActor { GENERATED_BODY()
public: // Sets default values for this actor's properties ATableRowSetting();
// Called when the game starts or when spawned virtual void BeginPlay() override;
// Called every frame virtual void Tick( floatDeltaSeconds )override;
UPROPERTY(BlueprintReadWrite,EditAnywhere,Category ="Data SettingActor") UDataTable* DataTable;
};
然后在该头文件中添加与该CSV文件对应的表格数据结构,该结构从FTableRowBase结构派生,代码如下: USTRUCT(BlueprintType) struct FTableSettingData :publicFTableRowBase { GENERATED_USTRUCT_BODY()
UPROPERTY(BlueprintReadOnly,Category ="TableSetting") int32 MAX_HP;
UPROPERTY(BlueprintReadOnly,Category ="TableSetting") int32 MAX_MP;
UPROPERTY(BlueprintReadOnly,Category ="TableSetting") int32 MAX_LEVEL;
UPROPERTY(BlueprintReadOnly,Category ="TableSetting") int32 MAX_XP;
}; 注意,该结构中的属性变量必须与CSV文件中第一行中的列名保持一致。 然后在BeginPlay函数中实现表格数据的读取,代码如下: void ATableRowSetting::BeginPlay() { Super::BeginPlay();
if (DataTable !=nullptr) { FTableSettingData* dataRow = DataTable->FindRow<FTableSettingData>(TEXT("HUMAN"),TEXT("LookupRow"));
int32 HP = dataRow->MAX_HP;
UE_LOG(LogTemp, Warning, TEXT(" Max HP is %d "),HP); }
}
至此,读取表格数据的代码工作已经全部完成,接下来需要在编辑器中完成必要的工作。 首先,将创建好的CSV文件拖至编辑器进行导入,导入时,会弹出提示框,选择DataTable,以及刚才定义的表格数据数据结构。 接下来选择刚创建的ATableRowSetting类资源,在属性中可以看到DataTable属性,将导入的CSV文件资源拖至该属性,保存工程并运行即可看到结果。
|