单机游戏和网游都需要"存档", 前者往往以文件形式存放于本地,后者则存储于在线数据库.
存档包含那些动态的, 游戏过程中随玩家行为改变的数据. 例如玩家生命值, 商店的商品存货量, 剧情进度等.
游戏启动时, 存档首先被获取(对于单机游戏, 直接从本地指定路径读取; 对于网游, 向服务器请求)并加载至内存, 之后随着游戏进程不断被读取和写入. 例如当一场战斗开始时, 首先需要读取存档得知玩家当前的生命值以做显示, 之后玩家每次受击或使用回复药水时, 将新的生命值写入存档.
此外, 游戏运行时还需要读取另一类配置数据. 和存档数据不同, 配置数据是预定义的, 静态不变的. 还以玩家进入战斗举例. 敌人是一只"lv1 哥布林", 玩家的武器是一把"lv1 铁剑", 现在需要获取铁剑的攻击力和哥布林的生命值. 这些数据不能和存档放在一起, 需要单独存放. 一般来说, 它们会作为程序文件的一部分, 在游戏启动时被加载以供读取. 对于网游, 服务端也会加载一份和客户端内容互通的配置数据.
游戏中存在大量的配置数据, 例如不同关卡分别包含哪些怪物? 不同的角色和武器每次升级增加多少点属性? 不同物品分别以多少金币出售? 所有这些预设的配置数据, 就构成了游戏的数值模型, 很大程度上决定了玩家的游玩体验. 数值策划的主要工作, 就是设计与维护合理的数值模型.
最后看看实际的解决方案.
存档数据
选用免费插件 Save Game Free, 上手简单, 功能基本齐全. 其原理是将数据实例序列化后存储(例如 json), 在读取时再进行反序列化.
配置数据
和存档数据类似, 游戏运行时将其反序列化成数据实例以供调用. 问题是还必须考虑数据的可读性, json 这样的键值对显然不利于人眼读取和修改.
于是使用 xlsx 格式, 也就是用 Excel 来配置和存储数据. 再使用刷表工具 tabtoy, 将 Excel 表格转换为 json 等格式供程序读取.
Excel 的使用体验并不算好, 过于臃肿, 也不支持复杂数据类型的配置. 还需要更好的解决方案.
配置数据表格实例
articy draft 解决所有数据问题
@mnikn:👍简单看了下官方手册, 功能确实很强大. 但不确定其做一般性数据配置(例如物品数据库)的能力如何? 能否像 Excel 一样方便地批量操作? 是否支持自定义类型? 下次会系统性地考察下, 感觉上手成本略高 😂
@cycle:肯定可以支持自定义类型,我没太深入地使用过,批量操作理论上应该也支持,基本上这个可以看作是游戏的数据库,所有的数据都可以往里面塞(包括剧情之类的
推荐下Luban,我之前复刻魔塔时,所有数据都是通过Luban配置的,包括本地化,支持复杂类型,支持代码生成,支持数据校验,缺点可能是对非程序来说上手有点难,文档不太直观。
可视化配置数据看起来高大上,真要大量配置时起来还是excel最好。不过像叙事流程这类的对话配置,就不建议用Luban这种基于excel的工具了,我用的Yarn Spinner,还算可以吧,毕竟有免费版
@agoo:很有道理, 复杂叙事应该采用不同的解决方案. 看了下Luban, 感觉解决了相当多痛点啊, 下个项目就试试看👍