oman3D 发表于 2016-9-14 10:12:31

UE4读取CSV表格配置数据

开发游戏时,经常会采用表格文件来存储游戏相关配置数,比如玩家的最大健康值、魔法值等,以及NPC的属性配置等。在Unreal下,无须自己编写表格文件的读取及解析代码,可以直接使用Unreal自带的读取表格数据功能。下面通过一个简单示例来说明如何通过Unreal来读取CVS格式的表格数据。表格数据示例如下:http://img.blog.csdn.net/20160809112032097?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

注意,表格第一个单元格必须为空,第一行为每一列的名称,该行数据也是存取每一列数据的唯一标识。表格第一列代表行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"));
      int32HP = dataRow->MAX_HP;
      UE_LOG(LogTemp, Warning, TEXT(" Max HP is %d "),HP);    }
}
至此,读取表格数据的代码工作已经全部完成,接下来需要在编辑器中完成必要的工作。首先,将创建好的CSV文件拖至编辑器进行导入,导入时,会弹出提示框,选择DataTable,以及刚才定义的表格数据数据结构。接下来选择刚创建的ATableRowSetting类资源,在属性中可以看到DataTable属性,将导入的CSV文件资源拖至该属性,保存工程并运行即可看到结果。

samcegreat 发表于 2016-9-14 11:42:12

楼主实乃我辈楷模。

zz_nirvana 发表于 2016-9-14 12:12:47

多谢分享!!!!!!

81434712@qq.com 发表于 2016-9-14 14:04:50

这是我想要的,但一定要通过C++完成吗?不能蓝图直接读取吗 ?

nameless123456 发表于 2016-9-14 15:32:08

谢谢分享,非常有用呢~~~~

rello 发表于 2016-9-14 16:16:10

支持一下

剑客 发表于 2016-9-27 21:37:40

个人觉得c++ 更易于和别的数据交互。比如想把csv中的部分数据存出去看看什么的,Bp无解!

killlu 发表于 2016-10-14 16:08:26

感谢分享

594270461 发表于 2016-10-18 14:55:15

zyx545792476 发表于 2016-10-20 14:01:02

66666,楼主乃当代之强国青年。
页: [1] 2
查看完整版本: UE4读取CSV表格配置数据