c# combobox集合数据不显示_UE4项目记录(四)数据表

题外话,如果有一块用UE4做游戏的美术,可以在评论区留下联系方式,不要求时间特别多,本人也是业余时间开发,贵在坚持。

据说在游戏开发的上古时期,策划和程序比现在还掐得厉害,往往是程序刚实现完一块功能,策划反手就是一波改需求,大需求可能还能接受,小的诸如我某某地方改个名字,改个数值,都要程序亲手操作。

于是,伟大的数据表被发明了出来。程序说我要开始偷懒啦,然后扔个策划一个数据表,让策划自己玩数值去。但是很多游戏公司,数值系统不完善,很多数值表没有专门的编辑器配置,从而成为很多策划加班加点的罪魁祸首。

为啥我改个数值,游戏崩了,为啥我加了个配置,游戏崩了。。。诸如此类的哀嚎

52195baecd788ac957d72c30df04ed77.gif

52195baecd788ac957d72c30df04ed77.gif

52195baecd788ac957d72c30df04ed77.gif

再完善一点的公司,终于有了自己的编辑器。

而unreal给我们提供的轮子,让我们可以简单地就造出数据表外加数据表编辑器的轮子。这篇主要讲数据表,下篇博文会讲数据表编辑器(非UE4中点开数据表自带的那种)。

unreal本身提供了数据表的类,如果我们想实现数据表,只需要#include "Engine/DataTable.h",继承FTableRowBase就行。

以游戏中最常见的货币为例,游戏中经常会存在各种货币,比如金币,点券等等。策划说,我们今天加一种货币类型,然后程序屁颠屁颠地在代码里面加了一种,策划说,我们这种货币类型不要了,程序又不耐其烦地删掉。但是我们会发现,其实多一种货币类型,其实绝大多数逻辑对于游戏都是一样的,无非就是多一个类型id,一个类型描述,但是程序那边很多情况是不需要改动的。

所以对于货币类型,完全可以让策划自己去配,只有涉及到专属货币的逻辑(很少有这种逻辑),才会有程序的事。

于是我们将货币类型做成配置表。

#pragma once

#include "CoreMinimal.h"
#include "Engine/DataTable.h"
#include "MoneyTypeConfigTableRow.generated.h"

/**
* @brief money类型配置表
*/
USTRUCT(BlueprintType)
struct GAMEFRAMEWORK_API FMoneyTypeConfigTableRow : public FTableRowBase
{
	GENERATED_USTRUCT_BODY()

	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "MoneyTypeConfigTable")
	int32 MoneyTypeId;				///< money类型id

	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "MoneyTypeConfigTable")
	FString MoneyTypeName;			///< money类型名字,用于类型生成

	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "MoneyTypeConfigTable")
	FString MoneyTypeDescription;	///< money类型描述
};

MoneyTypeName是我程序用于类型生成代码自己做的,在这里大家可以当作一个普通字段,忽略注释,后面会有博文单独介绍。

c++编译之后,我们在程序中就能创建数据表格了。右键Content创建数据表格,在ComboBox中我们就能找到数据表类型了。

63f3fec0323f13ef619c66300af37b19.png

208b67a059a2dd016ee77cd119af7243.png

如果只是想简单看一下效果,我们可以双击这个文件,出现unreal自带的编辑器界面,里面出现的列和我们类中定义的字段一样。

这里说一下我碰到的问题,很多时候,我们的数据表会增删字段,但是对于我们已经创建出来的数据表文件,并不会动态增加列。加入说我FMoneyTypeConfigTableRow这个结构体增加了一个叫Tag的FString的标签,我编译完项目后,现有的数据表格并不会增加Tag,甚至会出现打不开数据表格的情况。

这里我建议的是,如果你数据表里只有很少的内容(十条以下),而且字段特别简单,还是把文件删了重新创建表格,将数据加回来吧。如果你数据表里的内容特别复杂,或者行数特别多,那么你可以要程序那边先将代码回滚到与数据表一致的结构,这个时候怎么办呢,数据表都可以导出成json。

151b41636347ad689426f73117a362a1.png

导出后文件是这样的。

63f9c34f1fcca25df66492cdad21b285.png

是不是很熟悉,全部是表结构定义的字段,这个时候,到了程序写工具的时候了,随便用什么语言,C#、java,怎么方便怎么来,直接把文件内容转成json,然后每个jobject后面开始加东西,加的内容就是你数据表新增的字段(或者将里面老字段删掉),操作完后,将新文件重新import进来,一切就搞定啦。

数据表比较简单,下篇开始说基于数据表的编辑器扩展插件吧。

Tip:2019年11月18日记录,新发现修改表结构后,有种更快地修改已有表数据的方法,在虚幻里右击datatable文件,导出json,(这是用新表结构编译后的引擎,导出旧格式的文件),虚幻会自动把新增的字段给补全,这时再把老的删掉,重新导回刚才json文件即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值