作者:陈霈霖
说起游戏配置表,不论是游戏程序还是游戏策划,都是最熟悉、每天打交道的东西。
相信不少游戏程序员,撸过大量这样的代码:
classSkillSetting
{
publicintId;
publicstringName;
publicstringDesc;
publicintArg1;
publicintArg2;
publicintArg3;
//.....
//.....
}
classSkillSettingManager
{
//.....
publicvoidInit()
{
vartable=TableReader.Read("jineng.txt")
for(varline=0;line=table.RowsCount;line++)
{
Id=table.GetRow(line,"id");
Name=table.GetRow(line,"name");
Desc=table.GetRow(line,"desc");
Arg1=table.GetRow(line,"arg1");
Arg2=table.GetRow(line,"arg2");
Arg3=table.GetRow(line,"arg3");
//......
}
}
}//....//.....//......classBuffSettingManager{....}classTaskSettingManager{....}classMissionSettingManager{....}
//....接近上百个XXXSettingManager
相信不少游戏策划,都遇到过这样的配置表:
大家都或多或少也遇到过这样一些问题:
大量的配置表代码需要手工撸,枯燥繁杂
大量的手工配置表代码跟随着大量的BUG
策划配置表跟程序代码经常命名不一
策划新人看不懂配置表的这一列究竟是干嘛的
策划同学想要更方便的工具提升工作体验
配置表加载严重影响游戏启动速度
运营需求对游戏配置表修改热重载,手工代码没有支持
配置表相关联的功能和BUG消磨大量的研发、运营时间
这...多么痛的领悟...!
接下来让我们一起探讨一种游戏配置表的优化方案。
需求
编辑游戏配置表最多就是策划了,而策划最喜欢、最顺手的工具非Excel(或WPS表格)莫属。当然也有策划自己开发编辑器工具,但毕竟不是做全职工具开发,反而增大了工作量。
因此我们可以在Excel表格设计上,动动手脚。策划的需求:
配置表的列头带上注释
策划同学可以在任意他们喜欢的地方做注释
策划同学可以在他们的配置表中的添加文档性东西如图表、文字框
有时候同样的表,可以拆分成多张,方便编辑
拿到这样的配置表后,程序的需求:
希望配置表的代码是可以自动生成的
部分复杂逻辑的可以自定义扩展的
为配置表的列定义类型
方案编辑
针对以上需求,我们就会有这样的结果:
[excel源表]
第一行是列名
第二行是程序用途的类型声明,如int,Dictionaryint,string
第三行是该列的注释
列名以#开头,则这一列为注释列(忽略该列单元格内容忽略)
行的第一个单元格内容以#开头,则这一行为注释行(所有行单元格内容忽略)
可以加入图表、第二张工作表作为辅助内容
将如上表格,保存为SettingSrc/Test.xls文件。
下面我们使用一个名为TableML的执行程序,可以从