前情提要
昨晚发布了一篇入门级的游戏配表方案“独立游戏人:unity游戏制作——Excel转json配表方案“”,很多小伙伴表示不够自动化啊。本着有需求就要有实现的想法,今天小编就再研究一下这个自动化的工具。
需求
- 使用Excel或WPS表格配置和修改,保存为xls文件
- 使用python制作工具,运行后将根据Excels文件夹中的所有xls文件自动生成数据配置类。
正文
为啥要用python呢?python这门语言,对于操作文件来讲,是非常好用的。
首先是一些准备工作:
- 安装python3
- unity中导入LitJson.dll(文末会提供)
- 建立文件夹结构,其中xls文件夹用来存放excel表格,json文件夹用来放生成的json文件,cs文件夹用来放生成的实体类。
然后我们来创建一个命名为XXXConfig.xls的表格文件(暂时没有支持xlsx的表格)
表格内部结构如下图:第一行是变量名(转json的时候会变成小写,所以请一律小写)
第二行是对当前列的解释,对于转换来说没有什么用,只是为了方便阅读
第三行用来标记当前列数据类型,也是用来生成csharp实体类时创建类型的依据(暂时只支持int、string、double)
第四行以下就是数据了。
另外,为了方便读取,我们默认第一列都写id,用来作为实体类中Dictionary的Key值
之后,我们创建名e2jsonmain.py的python文件,文件引入os、xlrd、collections、json、codecs库
接下来写出xls、json、cs文件夹的路径
然后我们创建Unity实体类的模板,python的字符串用起来很不习惯,就用这种笨笨的+=符号来写吧。另外,我没有写换行符号之类的,所以最后生成的实体类代码都在第一行,如果你想提升可读性,那就自己加上换行符吧。我们来看一下这个类模板:其中有一些占位符,在生成的时候会被替换掉,比如ClassName、DataName、DicName,后面会根据xls的名字来替换掉这些名字。再后面Variables占位符会根据xls中第一行的变量名来生成变量来替换它。
再接下来,小编封装了一个长长的没有多少注释的代码,他的作用就是将一个xls文件转换成json和csharp实体类,主要的内容是使用xlrd解析Excel表,然后使用json库将他转化为json字符串,然后用os库将字符串写入文件。同样的使用模板生成csharp代码块。这一部分有一些很容易出错误的细节,感兴趣的同学可以在文末链接里获取代码。
函数准备好了,接下来用os.listdir遍历所有excel,使用函数处理就好了。
命令行运行e2jsonmain.py
然后就可以生成了json和CSharp实例类了。
最后再执行一次手动操作,将生成的json文件都移动到Resources文件夹中。
CardConfig.cs实例类中提供了Dictionary,以id为键。所以,在代码里就可以将CardConfig.cs实例化,然后从Dictionary中取数据了。
小结
python的文件操作给游戏开发提供了很大的便利,小编虽然用了一天的时间来研究这个东西,但是,以后给小编的操作带来的便利性,可以节省更多的时间哦。
因为是第一次写,所以还有很多不足的地方,请大佬们多多指教。
最后附上文件地址:
链接:https://pan.baidu.com/s/1RLNV64FGyRoszYioM_IAyg
提取码:rlwy