有什么不明白的地方,扫描右方二维码加我微信交流。
       

此项目的Demo和工具已经放在了GitHub上,有需要的朋友点击获取,建议配合Demo看博客。其中v0,v1,v2为工具,data.xlsx是excel配置示例表,data文件夹中的文件为导出的数据。

做游戏,难免会用到数据配置表。以RPG游戏类型为例,游戏中有大量的可配置数据,如英雄的各项数据(攻击,护甲,魔抗等等),装备的各项数据(血量,护甲等等),地图的各项数据等等。这些数据量非常的庞大,而且随时可能发生变化,这就要求开发人员不能把游戏数据都写死在代码中。推荐使用excel表配置数据,然后使用python工具导出成游戏可以读取的文件,这样方便策划配置各项数据,也方便我们导出读取。

废话不多说,直接开始介绍解决方案。

excel表配置规则

  1. 第一行备注;
  2. 第二行数据类型;
  3. 第三行数据的key;
  4. 支持配置数据类型:整型,浮点型,字符串,数组,哈希表;
  5. 支持导出数组表,哈希表。

如图所示,一目了然:

python工具

python读取excel表,需要使用到xlrd模块,所以先安装xlrd模块,使用以下命令:

//如果没有安装pip,则要先安装pip
sudo easy_install pip
//再安装xlrd
sudo pip install xlrd

工具的脚本内容GitHub自取,这里介绍几个重要的方法,掌握了以下几个方法,简单的excel表基本上都可以轻松读取:

//读取excel文件
data = xlrd.open_workbook(fileName)
//获取所有sheetName,返回值为数组
sheetsNames = data.sheet_names()
//根据sheetName获取数据
table = data.sheet_by_name(sheetName)
//获取一个sheet的某行或者某列所有数据,返回值为数组
table.row(rowNum)
table.col(colNum)
//表的行数和列数
print table.nrows, table.ncols
//读取某个单元格中的数据,数据会根据上面配置的类型进行转换
table.cell(rowNum, colNum).value

读取到数据,剩下的工作就是组字符串了。把你想要生成的数据格式生成一个长长的字符串,然后写入到文件中。这个过程非常灵活多变,所以什么格式的文件我们都可以生成。本例中只生成了js文件,若要生成json,lua等格式文件也不是什么难事,有需求的同学自行修改或者联系本人探讨。

选择哪个版本的工具

在GitHub中一共有三套工具,每套工具都会生成不同内容的文件,如下图中的数据:

v0导出的数据:v1导出的数据:
v2导出的数据:

根据以上三种数据内容,我总结三个工具的优缺点:

v0优点:数据直观,不需要二次解析,可以直接拿来使用;

v0缺点:当数据量特别大的时候,导出的文件会很大,因为有很多重复字符串(key重复)。

v1优点:去掉了重复的字符串,导出的文件小;

v1缺点:数据不直观,但在使用时数据又解析成了图一内容的格式。如果数据量特别大,则在第一次获取数据的时候,数据的解析可能会消耗一定的性能。

v2优点:v0+v1优点;

v2缺点:数据不直观,而且需要自己定义数据获取的方法(如下图方法)。

轻量数据推荐使用v0(比如像本博客中的excel中的数据量),中量数据使用v1,大量数据使用v2+自定义解析数据方法。

自定义数据解析模块使数据的读取更加灵活,我本人是比较推荐v2工具的。

大家根据自己的数据量需求选择相应的工具即可。

注意:

  • 博客中的脚本只支持excel表二层数据嵌套, 二层嵌套应该能满足大多数的需求了,如果嵌套多层(比如配置的hash或数组数值中再嵌套一层hash或数组),请自行修改脚本。
  • 我这边的项目没有合并单元格的需求,所以对合并的单元格未做研究,使用本工具可能会出问题。
  • 如果有其他更变态的需求,请联系本人探讨。

2 对 “数据的配置和导出解决方案”的想法;

  1. 不要用一种办法去解决所有问题。游戏配置不等于excel配置。更合理的看法是,什么样的数据适合用什么编辑器及格式去编辑,用工具统一它。

    推荐我们的一个实现:

    https://github.com/focus-creative-games/luban

    有几个强大的特性:
    1. 原生支持 excel族,json,xml,lua等数据格式,直接可以导出成程序使用的格式。意味着你可以自由选择将合适excel配置的数据用excel配置,适合json的用json配置

    2. 强大的类型系统,支持多态,像ai,战斗之类的复杂配置也能轻松表达,程序再也不用手写解析了

    3. 支持几乎所有常见的引擎和语言。支持引擎包括 cocos,unity,ue4、腾讯小游戏平台等等,支持语言包括 c++,java,c#,go,lua,typescript,python ..

    4. 使用云生成,哪怕是大型mmorpg项目,配置也能秒级生成。

walon进行回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注