我当技术策划(也叫TD)也有一阵子了,参与过一些大型项目,经手的业务类型和工作流也各种各样。恰逢最近面临一些变动,便整理一些工作心得。
从我个人视角看,目前TD的工作可以分成以下三类:
1. 快速产出原型玩法
2. 设计大型复杂系统
3. 设计并维护工作流
第一点,快速产出原型玩法,其实不太算是TD的专职工作,而应该是每个策划岗位都需要的基本技能,而且这里面其实也没什么门道,至少熟练掌握商业引擎或者一些其他的原型工具,就不是什么大问题。
关于第二点,大型复杂系统设计,会包括技能、AI、任务、关卡、对话、过场等等,是多数游戏的主体内容,业务逻辑深度大,而且需求多变,每一项具体业务都牵扯很多细节,不便在此一一展开。
至于第三点,设计并维护工作流,和上一条其实是互为表里的工作,TD需要基于对业务的理解,设计好一个制作流程中需要在什么模块引入哪些工种,每个环节交付什么内容,最后整合得到最终的产品。相比于具体的业务,编辑器作为一个话题就不那么庞大,本文就围绕编辑器展开好了。
1. Gameplay的编辑环境
根据以往的项目经验,策划需要使用到的编辑环境,两只手数得过来,无妨穷举一遍。
1.1. 文本
文本是最基本、最直接、最自由的格式,而优秀的文本的编辑工具则非常普遍,如
- VSCode
- SublimeText
- Notepad
文本最大的优势,还是在于它一般是最终的数据格式。如果没有加密或者压缩,运行时读取的配置文件最终是文本,这表示用文本表示的内容是最接近运行时数据的,因此通过修改文本造成改动需要经过的步骤最少,修改起来效率最高。
直接编辑文本还有以下优势:
- 是最容易比对与合并的格式,多人同时编辑没有压力
- 不依赖引擎,可以直接使用文本编辑器打开,复制粘贴撤销,批量查找与替换等基础编辑功能健全
- 没有图形界面的渲染压力,数据量很大也不会造成卡顿
- 没有编辑界面的遮蔽,编辑者更接近数据的最终结果
- 可以自定义格式,从而自定义可读性和信息密度
实际上,文本编辑的优势是如此明显,以至于我一度暴言,一个大型项目的开发效率取决于有多少配置可以直接走文本。关于这个暴言面临的实际挑战,我们留到后文再聊。这里先简单列举一下文本格式存在的缺陷:
- 非常容易出现格式错误,难以排查,因此必备良好的辅助工具,例如自动补全,格式校验等
- 如果格式设计失当,容易导致信息密度过低或者语境过高,难以阅读
适合文本直接编辑的格式的内容有
- 剧情台本
- 自定义脚本语言
- 有良好辅助工具的json,xml等配置文件,这里良好的辅助工具是必要前提
例:神秘海域4的动画事件,最后产生的东西基本就是文本
1.2. 参数面板
参数面板是一个把参数都平铺开的面板,一般来说属于引擎白给的功能,典型例子如:
- Unity的Inspector界面(尤其是在有了Odin插件加持之后)
- Unreal的Details界面
参数面板能够比较清晰地显示出当前有哪些可配置项,以及每一项的具体信息。一般来说参数面板都高度可扩展,可以很方便地实现下列功能
- 优化排版,控制复合结构的折叠和展开
- 在字段数量大时提供搜索功能
- 控制每一个字段的类型、值域
- 提供交互逻辑友好的提示
- 根据合法性或相关性控制特定字段的显示或隐藏
- 在引擎内可以支持拖动交互
- 提供搜索功能
在参数面板的辅助下,配置的条理性和安全性都可以得到相当大的提升。另外,参数面板的序列化也比较友好,所以相关的配置文件很多时候可以不用打开引擎就能编辑,在比对与合并的时候也比较好操作。
不过参数面板也有一些问题,例如:
- 在字段数量大的时候导航困难
- 不方便查看、比对较大量的数据
参数面板主要适合编辑能够便捷地以树形展开,且没有复杂引用关系的数据结构,例如简单的键值映射、列表与字典
人见人爱的Odin Inspector
1.3. 表格
表格是一个典型的根据键来索引值的结构,不过受到展示方式的限制,能够直观呈现出来的仅有二维表格。
表格的优势在于:
- 可以非常直观地通过单键或者双键索引一个值,在嵌套使用的情况下具备非常强大的描述能力
- 便于批量预览
- 有一套白给的工具集,如Excel和GoogleSheet,在绘制格式、数据筛选、公式计算、功能开发等方面都有非常强大的功能和可扩展性
然而表格的问题也有很多,例如:
- 要求配置的格式高度统一,对于存在多态的数据支持不友好,容易增加数据和操作的冗余,例如
- 字段A依赖字段B的配置才生效时,对应的依赖关系很难在表中体现
- 一些极少数情况才使用的字段在表格中需要占一列
- 无法逐级展开,涉及到多层级结构时只能嵌套,不便于编辑数组、字典字段
- 在列多的时候导航困难
- 编辑器环境和编辑环境经常不够隔离,即Excel本身是一个集格式、公式、导出于一体的工具,难以比对与合并,导致表格原文件在多人协作时比较不友好
- Excel源文件的数据绝大多数情况不能直接使用,需要走一套导出流程,迭代流程可能因此变得繁琐
二维表最适合描述的是大量简单的内容,用简单的一维或者二维键值映射就可以完全描述的数据。一旦超出这个范畴,继续使用表格就需要
- 把多个层级的数据强制铺在一张二维表中,造成配置字段的冗余
- 多张表嵌套使用,增加导航的难度
一旦上述配置方式在项目中开始蔓延,表格的编辑效率就会开始下降。
WatchDog2的NPC应激表,800列很难配
1.4. 时间轴
时间轴是用来精确地调整时机的工具,主要优势在于能够快速预览一段时间中某个精确时刻的状态,因此一般也需要配合一个视窗使用。
如果沿用Unity Timeline的术语,一个时间轴会包括多个Track,Track上面可以装载Event和Clip;Event对应一个时刻,而Clip由起止时间标记出一个时间段,这些都是为了精确描述逻辑触发的时间。
目前商业引擎一般都有较为成熟的时间轴工具,如Unreal的Sequence,Unity的Timeline,不过实际项目中依然会有大量需要自定义时间轴的需求。
时间轴的优势
- 能够直观地看到某个事件的发生时间,以及不同事件的先后关系
时间轴容易遇到的问题
- 由于和表现强相关,因此比较容易涉及到逻辑和表现的协作部分,协作的需求比较大;然而一般时间轴编辑后保存下来的数据格式相对复杂,比对与合并的工作略显繁琐,协作性不是特别好(在Unreal中可以靠合理设计嵌套规则解决)
适合时间轴工具编辑的业务
- 动作打击,需要精确地配合角色动作调整攻击判定、特效、音效以及一些逻辑区间(如无敌帧、霸体帧)的时机
- 过场动画,需要快速地预览摄像机、场景和角色之间的位置关系,调整运动的节奏