KEngine策划指南:配置表格的编辑与编译
策划与程序的桥梁
执行策划在游戏开发的过程中的主要工作是什么?当然就是和Excel打交道了。大量的Excel数据表,最终会被演变成游戏的配置数据。日常游戏开发中,策划编辑配置表一般有两种方式:
- 编译式:策划编辑Excel,经过中间程序转成csv、lua、json等程序可读的文本格式;
- 直接撸式:策划直接编辑Lua和使用Excel编辑TSV(CSV)等程序可读的格式;
而程序读取,理论上也因此有几种方式:
- 自动生成配置读取代码:自动根据策划编辑的Excel和规范,自动生成所有加载配置表的代码;
- 手工写读取配置表的代码:这是常见的方式,但往往一个项目下来,手写的配置表的代码不但大量,而且伴随策划配置的修改需要频繁的维护;
对策划来说,直接撸Lua或csv,体验肯定不如直接编辑Excel来得爽快;对程序来说,读表这种无技术含量的重复劳动,自然不如自动来得爽快。
KEngine中的配置模块,使用了编译式配置表,对Excel表有轻度的规范,策划可以根据自身需要,添加文档、注释、图标、批注等等各种辅助信息;并自动化生成出程序代码配置表加载API,供程序直接使用。
配置表的编辑和编译
KEngine中,配置表源文件,即编译前的表,默认放置在Product/SettingSource目录中;编译后的配置文件放置在Assets/StreamingAssets/Setting目录中。
Excel表格规则
该目录的Excel文件都要遵循以下的4条规则:
- 第一个表单(Sheet)为需要编译的内容;
- 表单的第一行是列名,如Id,Name等;
- 表单的第二行是列配置信息,如string/default,意思是列是string字符串类型,默认值是default; KEngine目前只使用前两位信息;
- 表单的第三行是注释,可以添加对列名的一些解释,最常用莫过于为英文的列明配上中文的注释了;
示例Excel
最终效果如图:

图:使用编译模式的最大好处,策划人员可以在Excel上进行注释、图表、批注等附加工作,甚至可以把一些文字描述文档,放到Sheet2。让配置表与文档结合在一起。
注释的行或列
除了第三行注释行,配置表模块还有两个添加注释的规则:
- 表单中,非头三行内容,行的第一个单元格内容为“#”或“Comment”时,认为这一行是注释行;
- 表单中,列名单元格内容为“#”或“Comment”时,认为这一列是注释列;
拆分表格
日常的开发中,我们有时候会嫌一个Excel文件内容过多,希望将其进行拆分;同时也方便多人协作。

图:文件名中使用“+”进行拆表
KEngine在编译时,对文件名处理施展了一点点魔法:当文件名中存在+号时,会裁掉+号后边的内容。
比如这3个文件:
- AppConfig+A.xlsx
- AppConfig+B.xlsx
- AppConfig+C.xlsx
在编译时,会统一合并成 AppConfig.xlsx。
但是要注意,务必确保这三个文件的表头信息要一样的。
配置表格的编译

图:Excel另存为中的“制表符分隔”文本文件就是所谓的TSV
TSV,类似CSV,即Tab-sepertated Values,类似CSV表格,仅仅是分隔符从逗号变成了Tab。 就我公司所经历的所有游戏项目,策划均直接用Excel撸TSV格式配置表。
KEngine配置表编译的本质,其实就是——把Excel文件转换成纯文本TSV格式文件。而在编译过程中,会删掉注释内容:第三行的注释,带#井号的注释等。
编译后的Excel
上图中的Excel,经过编译后变成的TSV文件内容:

图:Excel文件经过编译后变成TSV格式的表格,并且去掉了注释行。
如何在Unity中触发KEngine对Excel表格编译?

图:菜单 KEngine –> Setting 中的配置表功能
编译配置表功能项
执行菜单KEngine->Setting中的两个编译配置表功能项:
- Force Compile Settings + Code:强制重新编译所有的表,并且自动生成配置表代码(会触发Unity重新编译)
- Quick Compile Settings:差异化编译配置表,不重新自动生成配置表代码
配置表的文件监测
为了方便开发,在打开Unity编辑器后KEngine会对所有的配置表源文件进行监测,当发现Excel文件有改动,Unity编辑器就会弹框请求进行配置表重新编译(执行Quick Compile Settings差异化编译)

图:对Excel文件改动后,Unity会监测到变更,点击OK,就会重新编译
不过,当修改配置表时并没有打开带有KEngine的Unity工程,就无法监测到配置表的变更,这时就需要手工执行菜单的配置表格编译了。
配置表读取的代码生成
根据Excel配置表的头部信息,KEngine会在Unity Assets根目录(可通过 EngineConfigs.txt 这个INI文件进行配置)生成一个AppSettings.cs文件。这个文件包含了所有的配置表的读取代码。
配置表代码的调用方法
直接来看看配置表代码的调用方法——获取所有、获取某个、热重载:
// 获取所有的配置项
foreach (GameConfigSetting config in GameConfigSettings.GetAll()) // Get all Configs
{
Debug.Log(string.Format("C# Read Config, Key: {0}, Value: {1}", config.Id, config.Value));
} // 获取指定Key的配置项,Key为第一列
var testConfig = GameConfigSettings.Get("Test"); // Get by key // 热重载
GameConfigSettings.GetInstance().ReloadAll(); // Reload while settings recompile
GameConfig配置表

图:生成代码的GameConfig.xlsx
Excel表GameConfig.xlsx,会生成一个类GameConfigSettings,放置在AppSettings.cs代码文件中。
惰式初始化
生成的代码中,采用了惰式初始化方式进行配置表的加载: 即第一次使用时进行初始化。
从而避免游戏启动时的集中式初始化,降低启动时间,优化执行性能。
// 预热GameConfig表
GameConfigSettings.GetInstance(),
// 预热所有的表
SettingsManager.AllSettingsReload();
可是,实际开发过程中,我就是想针对某些表,先初始化,再进游戏?
根据 第一次使用时进行初始化 的原则,强制在初始化阶段进行一次调用就可以单例调用,就可以触发初始化。
热重载
对策划来说,简单的修改Excel配置表后,往往需要重启游戏,来看修改的效果。
KEngine配置表提供一种方法,可以在不重启游戏的前提下,重载配置表,来立即查看效果。
生成的配置表代码中,会监测其加载过的编译后的配置文件,当配置文件发生变化,就会进行重载。
如果文件监测失灵,你也可以通过菜单项来主动重载:

图:通过菜单热重载配置表
其他
既然KEngine中使用了Excel这种非纯文本格式进行配置表的编辑,那么在配合SVN等版本管理工具时,如何进行差异化的配置表比较?可参详:《KEngine:Excel如何进行SVN协作、差异比较?》
版权说明
文/公的Kelly[mr-kelly](简书作者) Email: 23110388@qq.com
原文链接:http://www.jianshu.com/p/ead1a148b504
著作权归作者所有,转载请联系作者获得授权。
KSFramework系列
github地址:https://github.com/mr-kelly/KSFramework
欢迎大家到 github提issues
KEngine策划指南:配置表格的编辑与编译的更多相关文章
- FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶部菜单框架
这是一篇很长的文章,在开始正文之前,请允许我代表目前排名前 20 中唯一的 .Net 开源软件 FineUI 拉下选票: 投票地址: https://code.csdn.net/2013OSSurve ...
- Swift - 给表格添加编辑功能(删除,插入)
1,下面的样例是给表格UITableView添加编辑功能: (1)给表格添加长按功能,长按后表格进入编辑状态 (2)在编辑状态下,第一个分组处于删除状态,第二个分组处于插入状态 (3)点击删除图标,删 ...
- EasyUI datagrid 明细表格中编辑框 事件绑定 及灵活计算 可根据此思路 扩展其他
原创 : EasyUI datagrid 明细表格中编辑框 事件绑定 及灵活计算 可根据此思路 扩展其他 转载,请注明出处哦!谢谢! 原创 : EasyUI datagrid 明细表格中编辑框 事件绑 ...
- Linqpad使用(调试Linq、结合linq调试业务场景、表格内编辑数据)
linqpad是一款linq语句调试工具,功能如下: 1.直接执行linq语句并查看生成的原生sql语句 2.可结合linq+C#代码进行业务场景调试 3.表格内直接新增.修改.删除数据 4.直接 ...
- Django前端HTML通过JS实现表格可编辑,动态添加行,回车完成新建文件夹
功能描述: 点击“新建文件夹”按钮,在table的末尾增加一行:单击页面的新增行,使单元格td变成可编辑状态:输入内容后,当单元格失去焦点时,保存输入的内容:回车后通过AJAX提交后台完成新建文件夹. ...
- 基于layui,Jquery 表格动态编辑 设置 编辑值为 int 或者 double 类型及默认值
首先先推荐大家在看这篇笔记时,阅读过我写的这篇 Layui表格编辑[不依赖Layui的动态table加载] 阅读过上面那篇笔记之后呢,才能更好的理解我现在所要说的这个东西 接下来废话不多说,上代码. ...
- ElementUI表格行编辑单元格编辑支持(输入框,选择框)Demo
嗯,需要做成这个样子,所以网上查了些资料.整理了下.提供几个一个思路.不足之处请小伙伴指出来. 普通版的table可编辑内嵌select选择框,输出框,编辑删除添加等 <!DOCTYPE ht ...
- Sentry 开发者贡献指南 - 配置 PyCharm
概述 如果您使用 PyCharm 进行开发,则需要配置一些内容才能运行和调试. 本文档描述了一些对 sentry 开发有用的配置 配置 Python 解释器:(确保它是 venv 解释器)例如 ~/v ...
- CEF避坑指南(一)——下载并编译第一个示例
CEF即Chromium Embedded Framework,Chrome浏览器嵌入式框架.它提供了接口供程序员们把Chrome放到自己的程序中.许多大型公司,如网易.腾讯都开始使用CEF进行前端开 ...
随机推荐
- Windows-mysql5.7安装
下载 mysql 5.7.msi 安装 双击mysql.msi,按照提示安装. 安装之后需要注意的问题(重点) 设置mysql环境环境变量(让mysql在cmd中的任何路径下就可以被调用) 鼠标右击计 ...
- Tomcat部署记事
1.导入证书到jdk里 keytool -import -alias 证书名称 -file 证书地址 -keystore 导入位置 例:keytool -import -alias co3 -file ...
- CSS3 学习笔记
border-radius 圆角是做网页永远绕不过的话题,以前基本是通过背景图片做的,有了 CSS3 以后通过属性就 能够搞定,我们可以通过 border-radius 设置元素的圆角半径. bord ...
- Sass的使用和基础语法
sass安装 官网下载ruby的windows安装包,安装时勾选上添加到环境变量add ruby executables to your path.安装完成后打开命令行,ruby -v输出内容则安装完 ...
- arcgis破解的时候,不能启动license manager的问题
1.防火墙没关:(非常重要) 2.win+R,调出控制台,输入services.msc.然后手动开启ArcGIS license manager服务,关闭其余类似erdas,matlab影响该服务的开 ...
- ajax点赞功能
- Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.解决办法
Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The ...
- iOS 检查更新
注意:苹果官方是不允许app具有检查更新提示! //直接跳转到AppStore - (void)setUpAppUpdate { [ServerData queryGetURL:@{@" ...
- iOS 学习 - 9.Block 入门
来自李明杰的视频. block 用来保存一段代码 block 的标志:^ block 跟函数很像: 1).可以保存代码 2).有返回值 3). 有形参 temp1:没有返回值.没有形参的 blo ...
- iOS做新浪微博sso授权登录遇到的一些坑
新浪微博sso授权第三方登录,这里没有借助第三方框架,如shareSKD和友盟等,直接参考新浪官方SDK和文档. 过程中遇到几个坑,找了很久,好歹最后解决了,记录如下 问题1: _NSInlineDa ...