《Unity3D高级编程之进阶主程》第三章,数据表(一) - 数据表的种类

数据表完全可以认为是一个本地的数据库,只是这个数据库里的这些数据不可修改,是只读的。它大部分是从excel里生成出来的,再导入到游戏中去。也有使用比较原始的方法,比如直接写在代码里。

数据表是连接美术,设计策划,和程序的桥梁。艺术家们用它来配置效果,设计师用它来调整游戏的数值平衡,程序员们用它来判断逻辑。所以数据表的意义非常大,是连接各个环节的桥梁。

===

数据跟excel分不开

自从微软创建出神级的excel后,全世界都爱上了这款软件,无论自用还是商用,制图还是分析都离不开它了。

居我的了解,基本上所有的公司都在用excel。而且,只要跟数据,数字,接触的职业,都会大量使用excel来做数据分析,数据制表等工作。

它能给你所有你想处理数据的功能,而且快捷,方便,易于保存,上手快,方便传播等等等,说不完的好品质。

所以呢,游戏行业里数值策划更是喜欢这个工具了,我们的游戏数据跟excel分不开,我们需要用它的来加快效率,特别是数据开发,数值平衡部分。

现在你应该明白了,我为何如此夸大的它的优秀,因为他确实在很大程度上加快了项目的进度。

下面说所的数据表,基本上都是意味着从Excel文件中导出来的数据的集合。

我们来看看数据表的建立可以有几种方式:

代码数据

最最原始的数据,是写在程序里的,这种临时级别的数据,在更改,增加,删除时增加了大量的程序员的工作量。

然而让策划人员去自行更改代码里的数据,不但增加了修改程序的风险,也让数值策划人员批量修改数值的难度增加好几倍。

所以这种放在代码里的数据,基本都只存在于Demo阶段,或者mini游戏中,因为数据量小,更改的次数少,不会特别去在意数值的平衡性。

数据放在代码里的原因就只有一个,快。不需要建立与其他部门的桥梁,比如建立excel表,制定规则,转化数据等。代码里的数据只有程序员知道是什么,为什么这么写,也只有程序员能看明白。

txt文本数据

文本是一种常用的数据表形式,通常用.txt文件,里面全是字符串形式的文本,包括数字在内,在程序读取后转化为相应的数据类型,例如整数,浮点数,文本,数组等。所以怎么读取,读取的规则也有了一定的考究。

文本读取规则有很多标准形式的,包括Json,Xml,CSV等。这些都是常用的文本读取规则,在很多环境下,用文本读取字符串形式的数据然后按规则来转化成相应的数据和数据组也是极佳的选择。它的优点是能肉眼看到数据,并且查找问题,也能立即直接修改。

通常为了方便,把数据直接用逗号隔开,或者用空格隔开,或者用特别的符号比如';'分号等形式隔开,就可以作为一个数据的规则格式了。

还记得我们主要的数据开发工具是Excel么,为了能从Excel里更容易的导出数据,我们会选择一些更加简单实用的导出方式。比如直接从Excel里复制粘贴数据到txt文件,这是最最直接的手动导出方式。

也有用Excel直接保存CSV格式的,就是以','逗号开的格式的txt文件。

这些都是比较容易的方式,如果要做到不手动,而是用程序工具转化,那就需要写个程序读取Excel文件内容,并导出相应的格式了。

写一个程序工具来导出Excel的数据,就有很多格式可以考虑了,比如我们前面提到的,Json格式,Xml格式,以及自定义格式。

通常习惯使用工具导出Excel数据的同学,都会使用使用程序工具导出数据,因为他们已经熟悉了这套流程和方法,在制定项目模块规划时就很容易把这块规划进项目里,因为对他们来说,是顺手拈来的事情,而且这事很容易做到,一劳永逸。

自动化是最终的目标,我也希望任何工作都可以自动化来代替,从而减少人力操作导致的失误,减少了工作量,同时也减少不必要的精力浪费。

比特流数据

数据比特流是一种稍微高级点的数据表现形式,他是将数据转化为2进制形式存放在文件里,然后程序通过读取2进制文件,按一定的规则将其转化为所需要的数据。它比起文本形式的数据文件特点是,占用的空间更加小。

为什么更加小,因为存储数字时,是直接用2进制形式存储的,比如,txt文本中23345是“23345”这个字符串,占用了5个字符,每个字符2个字节,就用了10个字节,而2进制存储可以直接使用2个字节(short)存储了这个数字,所以数据比特流形式的数据存储文件更加小。一个以文本形式的txt文件来建立的10MB的数据文件,转化为2进制格式后,最大应该可以压缩到几百KB。

一个10MB的文件在读取的时候是很消耗CPU的,假如项目中有几个甚至几十个这样的数据文件,在游戏进行中的卡顿是难免的,因为这么大的文件光读取整个内容就已经很消耗CPU资源了,更别说,还需要在读取文本数据后进行解析。庞大的文本解析,让几百上千个字符串,转化为数字或者浮点数,是很浪费CPU的。

这个和数据网络传输时使用的协议是一个道理,有人使用了json格式的数据协议来传输网络数据,所以当数据大时,json字符串占用的数据量也非常大,启用压缩算法也不能解决根本问题。所以很多人转而使用数据比特流形式的数据协议来传输网络数据,以减少网络数据占用量,即使在网络不稳定的情况下,因为体量比较少,所以能够准确送达的概率也大了很多,从而网络性能也提高了很多。关于网络协议具体内容,会在以后的章节中一一介绍。

以比特流形式作为协议的标准很多。比如最近比较流行的,Google protobuf。

这里简单介绍下Google protobuf:

    protobuf是一个开源项目,而且是后台很硬的开源项目。网上现有的大部分(至少80%)开源项目,要么是某人单干、要么是几个闲杂人等合伙搞。而protobuf则不然,它是鼎鼎大名的Google公司开发出来,并且在Google内部久经考验的一个东东。由此可见,它的作者绝非一般闲杂人等可比。

    那这个听起来牛X的东东到底有啥用处捏?简单地说,这个东东干的事儿其实和XML差不多,也就是把某种数据结构的信息,以某种格式保存起来。主要用于数据存储、传输协议格式等场合。

protobuf有啥特色呢?会放在网络层的章节里讲。

感谢您的耐心阅读

Thanks for your reading

  • 版权申明

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

    《Unity3D高级编程之进阶主程》第三章,数据表(一) - 数据表的种类

    Copyright attention

    Please don't reprint without authorize.

  • 微信公众号