设计思路:
导表工程用Python编写
核心思路:
利用python版本的protobuf,把excel数据序列化成bytes,把二进制bytes文件拷贝到工程中使用,以我们项目Unity引擎为例,C#和Lua都有使用到bytes数据,使用C#的pb和Xlua的pb分别解析bytes文件即可得到配表数据。
为何选用Google Protobuf
Protobuf是一种支持跨语言的序列化和反序列化数据工具
protobuf优势:压缩数据,占内存小。跨语言且主流语言都可使用。
导表流程设计思路:
- excel数据转csv数据
- csv数据写入到一个python脚本中,下面用csv_python代替
- 利用excel列数据生成一个带有列名的proto
- 使用protoc工具使用第三步的proto生成python版本的pb2文件
- csv_python引用pb2序列化数据成bytes文件
- bytes拷贝到项目
- 项目内使用对应版本的pb反序列化数据
上面7步设计思路是一个非常笼统的描述,因为在实际开发过程中,要考虑无数种问题,例如用户如何输入,如何提示用户输入,是否支持一次输入多个表,是否支持一键全表导出,客户端和服务器数据拆分,生成统一读表脚本,很显然,需求是复杂且多样性的,因此在开发过程中,一定要让代码流程化,像车间一样分步工作,保证代码可追查,能重复利用功能一定要注意通用性。
工程启动方式
查看源码使用vscode启动工程,策划等用户使用cmd脚本启动工程,两者是有区别的。
区别1:启动后的当前路径不同
工程启动当前目录是start.py脚本所在目录,cmd启动当前目录时cmd所在目录,因此在开发python工程中,涉及到生成、获取文件等需要相对路径的操作,都要写一个统一接口做区分吗,还有个方法时修改工程当前目录,这个我暂时没验证。
区别2:Unity工程路径不同
用户cmd启动导表工程,由于每个人的导表工具路径不一致,使用export_setting.bat配置各个文件夹的路径,并由run.cmd读取该export_setting传入到python工程中,参数作为sys.argv数组的形式读取。如果是vscode源码启动,没有这个sys.argv怎么办?我们可以在start.py启动时进行判断,如果sys.argv的数量为1,证明是vscode启动,例如下面的代码
sys.argv = [0] * 13
sys.argv[0] = "./TableCreater/Script/start.py"
sys.argv[1] = "2"
sys.argv[2] = "./../../"
sys.argv[3] = "./../../../EnumData"
sys.argv[4] = "./../../../AllData"
sys.argv[5] = "./../../../AllData/client/cs_pb"
sys.argv[6] = "./../../../AllData/client/cs_script"
sys.argv[7] = "./../../../AllData/client/cs_bytes"
sys.argv[8] = "./../../../Project/ClientProject/CS/Table/AutoGen/TablePb"
sys.argv[9] = "./../../../Project/ClientProject/CS/Table/AutoGen"
sys.argv[10] = "./../../../Project/ClientProject/CS/Table/AutoGen/TableBytes"
sys.argv[11] = ""
sys.argv[12] = "02_UI表.xlsx"
区别3:
run.cmd启动python工程只是第一步,我们还可以创建更多的cmd文件调用run.cmd文件,并向run.cmd传入不同参数,实现python工程输出不同的语言文件
run_csharp.cmd启动输出C#
run_all.cmd代表出版本
run_common.cmd代表导出客户端和服务器
总目录
[第三篇] [打表流程第一步] 将excel文件转CSV并输出到CSV目录
[第四篇] [打表流程第二步]使用CSV数据并生成proto
[第五篇] [打表流程第三步]protoc-gen-lua.bat生成lua版pb文件
[第七篇] [打表流程第五步]使用pb2生成一个用于导出bytes的python脚本