剧情系统其实就是"玩家在特定条件下的特定行为引发特定结果". 例如, 主角 达到等级10并于半夜12点抵达新手村门口的大树下即可触发一段特殊对话.
为此我们需要:
- 存档系统, 记录所有剧情事件的进度. 往往后续剧情的触发依赖于前置剧情的完成.
- 玩家监视系统, 在玩家做出特定行为后判断该行为是否满足推进剧情的条件.
- 剧情管理系统, 在剧情发生推进时进行记录, 并执行具体行为.
同时, 对于包含大量剧情和事件的游戏来说, 一个可视化的剧情配置方案也是必要的.
以《浮星》为例, 玩家在不同恒星系内移动并触发事件, 这些事件可能彼此独立, 也可能相互关联. 由于使用了类csv的格式进行配置数据的存储(见上篇日志), 我们希望剧情也能一行行地配置在表格中, 这样既一目了然, 也方面随时修改.
为此我们将"剧情"拆分为一个个"原子事件"和"原子条件", 而每个原子部分, 就是表格中的一行配置. 这样, 一切复杂的剧情都被抽象为可复用, 可随意组合的碎片.
再来看上面所举的例子, 触发该事件的原子事件是"玩家移动", 需要满足的原子条件为"玩家位置靠近村口大树""当前时间半夜12点""玩家等级>10", 执行的原子事件为"触发指定对话".
在表格中配置好事件后, 我们就可以根据其ID, 以配置或代码的方式将其分配与游戏中合适的位置.
表格配置示例
以表格的方式配置剧情实际上是个糟糕的解决方案, 不仅可视化很差, 也难以处理复杂的网状剧情. 已经有很多成熟的第三方解决方案, 例如 asset store 上的 Dialogue System, 以及功能更为强大的 articy draft. 有待进一步考察.
暂无关于此日志的评论。