《Unity3D高级编程之进阶主程》第三章,数据表(二) - 数据表的制作方式

第三章,数据表(二)

前文介绍了关于数据表的几种形式。《Unity3D高级编程之进阶主程》第三章,数据表(一)

本篇来介绍下数据表的几种制作数据的方式。

Excel是大部分数值策划选择用的填数工具,因为Excel是天生的为数据处理而生。而Excel转什么格式就需要选择了。

比如最简单的就是直接复制黏贴到txt文件作为游戏数据了。这种方式最简单快捷,任何人都能做,但问题就是当多个xls转化为文件数据时,你就麻烦了,每次都要手动复制粘贴一遍。而且手动导入后你还要想想,是不是复制粘贴错了。为了Demo加快进度,也这么干过。但好几次查些莫名奇妙的数据表错误,都是因为人脑是有极限的,时常会因为重复劳动太多次而出错。

===

有比较简单的直接Excel手动另存为导出CSV,就有了CSV的一个规范。 这样既有了规范,又不怕复制粘贴错误,但还是有很多问题,比如多个文件时,你的重复劳动还是很多。

于是自动化是再次进阶的主题,将所有需要人工操作的流程,全部写入程序,让程序来帮助你完成工作。

主流自动化程序方式有很多,例如使用Shell设计自动化流程操作,也有自己通过特定语言写自动化的比如C#从Excel中读取数据后写入特定文件,还有使用Jenkins的,Jenkins不是万能的,他只是一个Web的管理页面,他也需要借助特定的语言,比如Shell或C#或Python或Ruby,甚至这些语言的组合,如果这些你都不太熟悉,还可以使用Unity3D的菜单栏编辑功能,实现点击菜单栏按钮后执行一套相关程序,也是种不错的选择。

自动化其实是最终的目标,让人力成本降到最低,节省所有能节省的精力消耗,把所有人员的注意力都集中到核心问题上去,比如框架,核心战斗,变化多端的渲染方式等。

让数据使用起来更加方便

用什么形式的文件作为数据表并不最最重要的,CSV也照样能把游戏跑得很好。这些技术并不决定游戏的性能会怎么样,只要你喜欢,什么形式都可以。很多时候,我们在选定数据存储规则时,大都选择的是自己熟悉,并且团队任何的方式。因为这能给我们带来很大的便捷性,也加快了开发速度,让团队不用这么痛苦并且浪费时间去适应新的规则。

关键是数据表是连接策划与其他部门的桥梁,所以你在做的时候需要考虑体验因素。如何让策划在配置数据表的时候能够有更好的体验就成了关键。所以好用是关键。

为什么要好用呢?只有好用才能提高效率,人员用着舒心顺畅,让项目在进展中,这种工具的使用提高了效率,而不是阻碍了效率。

前面提到的自动化就是提高效率的一种方法,还有比如一键转化XXX,这种形式的也是提高效率的好办法。

一键转化Excel到其他格式是一个比较人性化的工具,不需要人工手动去转化,通过工具就能搞定,只要数值策划按照你们双方约定的规则就行。这能大大提高数值策划与程序的协调性,一个系统,一个模块,需要什么数值,什么类型的数值,表要怎么建立,在你们约定的填表规则上,建立,读取,转化,变得轻而易举。

但是只有自动化,一键XXXX的功能,还是不够。因为这些只是一种工具,我们要的是团队间,特别是部门间,不同工种间的配合能顺畅无障碍。

再深入的解释下这种,要达成部门间顺畅无障碍的配合的意思。

假如,有了自动化,有了一键转化XXX的功能,策划设计人员可以自由的将Excel数据转化成能让程序员读取的数据格式,但是策划设计人员一直在对数据进行变动,特别是对字段的类型,字段的名字,一直在变。今天这个字段定义为id,明天这个字段成了是time了。或者插入了一个新的字段,删掉了旧的字段,或者新增了一个数据表,或者删掉了一个旧的数据表,等等。这让程序员很头疼,每次改程序员都及时得到通知,即使及时得到通知,也会遇到很大的麻烦。

所以我们需要再深入的加强这种好用的规则优化。

再深入一点,每次策划设计人员增加Excel表时,都需要更程序员打招呼说,你帮我把这个Excel表加入到自动化和一键XXX的功能里去。程序员就需要腾出时间和精力来为策划设计人员服务。我们把这块移出去,策划设计人员能够可以自定义导出哪个Excel文件,以及Excel文件里的哪个工作簿。这样策划可以自主选择和自主增加表的导出内容。

怎么做?一个可行的办法是,写程序指定导出哪个表时,会预留几个参数,这个参数是指向某个需要导出的文件的,以及需要导出sheet。那么在命令行里,执行这个程序并且后面跟上参与就能导出数据。

但是批处理写命令行也好,shell写命令行也好,毕竟还是程序级别的。策划并不能很好的控制对表的导出内容的增加和修改。 比如我需要新增一个表,或者修改某个表的文件名,或者修改导出某个表文件里的sheet,这项工作还是需要修改命令行的,或者说修改批处理文件,或shell文件的。策划并不会改,或者说并且这种命令形式并不直观。

再次加入规则,让自动化和一键XXX更加人性化。我们可以增加一个Excel表,表里面填有具体要导出哪些Excel文件里的哪个sheet,这些sheet的数据导出后的文件名是什么,以及生成文件后,文件应该转移到哪个文件夹中去。这样策划就可以自行定制,我们需要用哪些Excel里的哪些sheet,可以自行增删改,可以完全自给自足了。策划设计人员完全能够主导所有数据的导出工作和转移工作都了。

还不够。方便了策划设计人员,程序员的麻烦还没解决,如果设计人员改了字段名字,插入了新的字段,删除了字段,又没有及时通知程序员,或者说忘记了自己做过什么怎么办,那岂不是要全盘彻查了?不可以,彻查这样的效率太低,不可以让这种事情发生。如果能在生成数据时自动检查与程序的对应关系就好了。

再加一个规则,让字段名字与程序对应的规则。

我们来再深入一点,用程序生成一群变量定义与每个数据表字段名对应,将每个要导出的sheet里的头行的列名作为变量名字写入程序变量定义中,以方便程序在读取数据表时,列名与数据表对齐,无形中校验做好了。

比如,role.xls文件中,role这个sheet(工作簿)中的第一列字段为ID,第二列字段为Name,第三列字段为Age,那么程序变量生成后就是这种格式。

public Class ExcelDefine
{
    public const int role_role_ID = 1;
    public const int role_role_Name = 2;
    public const int role_role_Age = 3;
}

当策划设计人员更改字段后,新增字段,删除字段后,会如何呢,比如第一列ID更改为Identifier,第二列插入School,第三列Age删除后,生成了如下的代码。

public Class ExcelDefine
{
    public const int role_role_Identifier = 1;
    public const int role_role_School = 2;
    public const int role_role_Name = 3;
}

这样一来,原来在程序中使用的ExcelDefine.roleroleID,ExcelDefine.roleroleAge,将失效报错,而 ExcelDefine.roleroleName则自动转入读取第三列无需修改。

这样一来程序员不再需要知道策划设计人员修了数据是第几列,策划设计人员忘记了修改哪里也无妨,因为在编译时就会报出相关的错误,提示程序员们,表中的哪些字段进行了修改,你需要向策划设计人员询问具体意向。

做到这里,有了自动化和一键转化XXX的工具,省去了不少人力;加入了规则,让策划设计人员完全可以自己控制Excel数据表的操作;加入了检查校验和修复的功能,让程序员在数据表衔接部分也得到了很好的检查和校验作用,可以说完美了。

感谢您的耐心阅读

Thanks for your reading

  • 版权申明

    本文为博主原创文章,未经允许不得转载:

    《Unity3D高级编程之进阶主程》第三章,数据表(二) - 数据表的制作方式

    Copyright attention

    Please don't reprint without authorize.

  • 微信公众号