游戏开发中导表工具的设计要点

247 阅读3分钟

在游戏项目中,策划(Game Designer) 通常会使用Excel来配置各种数据,比如角色属性、物品、任务等等。程序员(Game Programmer) 需要把这些数据用到游戏里,但不太可能直接读取Excel(效率、安全性考虑),所以需要一个中间步骤,把Excel转成更易处理的格式,比如CSV、JSON或其它。

一个导表工具,就是用于上述所说的中间步骤。写一个从excel表格导出CSV或者JSON格式,并生成对应的业务代码的工具并不难,快的只需要不到500行代码,但是要解决好日常使用中的几个痛点

痛点1, 好用的基本功能

从excel表格里导出结构体定义,并且把excel转为CSV/JSON等格式是基本需求,但还希望有一些附加功能:

  • 支持多一些基本类型,可以用bool, int8, int16, int32, int64, float, string等;
  • 支持字段注释,比如以#开头的字段名在导出时候会被忽略,用于配置一些说明信息;
  • 头部字段名称是否有重复的判断;

痛点2, 支持常见的数组和字典复合类型

比如int[]表示int数组,<int,string>表示key为int类型,value为string类型的字典

章节需要完成的任务可以获得的奖励
ChapterTasksReward
intint[]<int, int>
11011021033401=103402=20

痛点3, 支持多字段的数组

宝箱ID概率1物品1数量1概率2物品2数量2
IDWeight[0]ItemId[0]ItemNum[0]Weight[1]ItemId[1]ItemNum[1]
intintintintintintint

如上表的配置格式,期望是配一个宝箱的掉落每个掉落有对应的概率和物品,这个表格期望生成的代码格式是:

struct TreasureBoxItem
{
    int Weight;
    int ItemId;
    int ItemNum;
}

struct TreasureBox
{
    int ID;
    TreasureBoxItem[] BoxItems;
}

痛点4, 全局变量表的纵向解析格式

比如这个表格

字段名字段类型说明
IDTypeValue#Desc
stringstringintstring
Key1float3.14浮点数值
Key2stringOK显示文字
Key3bool0功能开关
Key4int[]123等级列表

应该要生成下面格式结构体

struct Global
{
    float Key1;
    string Key2;
    bool Key3;
    int[] Key4;
}

痛点5,不同项目类型的区分导出

这是一个常见的需求,比如有一个excel表格,某些字段只有客户端需要,某些字段只有服务器需要,

可以通过前缀匹配来实现

公共字段服务器字段客户端字段
IDS_FieldC_Field
intintstring
  • 如果是仅服务器使用的字段,字段名的前缀加上S_,导出的时候指定选项--project_kind=server

  • 如果是仅客户端使用的字段,字段名的前缀加上C_,导出的时候指定选项--project_kind=client

结语

写工具代码不难,关键是设计,如何变得好用、不易出错、并且有一个不错的性能。

最后介绍一下自己项目里用的导出工具,解决了以上所有痛点:

github.com/k7tchen/tab…

欢迎使用和反馈