Titanium Court 的“故事片段”系统如何助力打造宏大叙事

在引发广泛热议并斩获独立游戏节(IGF)奖项的西莫斯·麦克纳利大奖后,独立开发者AP Thomson的新作《Made with Unity: Titanium Court》于上周正式上线。
欢迎阅读我们在GDC周期间与AP的访谈,听他亲口讲述这款新策略游戏,以及他为实现其独特、动态叙事而开发的工具。
AP 汤姆森:《钛金法庭》讲的是什么?说来,这个问题确实很难回答。
这是一个充满仙女与魔法的世界,但这里的魔法或许比你想象的更为平凡,而这个世界的平凡之处却比你想象的更为神奇。

打造以故事为核心的游戏
《钛之庭》是多种不同题材的奇特混合。所以里面带有一点匹配游戏的元素。它带有一点塔防的元素,还有一点资源管理,以及一点经济模拟,还有一点纵火模拟。这款游戏里发生了很多事情。而且这还是一款叙事类游戏,其中包含大量文字内容,而且叙事节奏安排得非常有趣。这有点像,你在进行 roguelike 模式的运行时,其中穿插着一段剧情,而这段剧情无论你输赢都会继续发展。
我觉得这是一款适合喜欢阅读的人玩的游戏,但遗憾的是,我认识的几位大学教授都告诉我,现在的人似乎已经不太懂得如何阅读了。
这本书值得一读。

构建动态叙事工具
《钛庭》的叙事设计采用了如今被广泛称为“故事片段系统”的机制。我最初想出“storylet”这个词时,还从未听说过它——
你可以把它看作是一个独立的场景。
故事片段系统真正能实现的,是那种极具动态性的故事——根据游戏中实际发生的情况,某些事件可能会发生,也可能不会发生。
因此,它让你能够设计剧情。我将其称为“瓶中信式设计”:基本上,我可以打开一个场景文件,写下关于该场景的所有必要信息——包括它在游戏中的具体发生位置——然后把它装进瓶子里,扔进大海,或许几周后,当我玩游戏时,这个场景就会出现。

在 UNITY 中管理 STORYLETS
所以,我设计了一些会移动的角色,或者在特定时刻弹出的小型人物肖像。而这一切都包含在一个位于 JSON 脚本文件中的场景里。此外,该文件中还包含大量元数据,说明了该场景在游戏中的出现位置。因此,我们掌握了诸如“该场景应出现在本章节中”、“该场景仅在观看过其他场景后才会出现”,或者“该场景仅在玩家完成游戏内的特定任务后才会出现”等信息。
我想,它能让你处理复杂的依赖项网络。
它内置了一个锁定系统,以防止同时触发过多的场景。所以我设计了一个系统,在某些场景中,我可以告诉它:“去锁定这些角色的动作吧。”
它最初基本上是一个单独的脚本文件。所以这就像一个 JSON 文件,我在其中填写所有的对话、舞台指示以及元数据。但随后,我会将这些数据交给我在 Unity 编辑器中编写的一个预处理脚本,该脚本会遍历所有这些 JSON 文件,将它们全部变换为预制件,并为预制件填充数据。正确的数据,比如各种布尔标志之类的内容,这样一来,所有这些预制件都会被索引到一个中央索引对象中,该对象随后就能处理在正确的时间选择正确场景的实际技术实现。
这种系统并不一定能让你更轻松地梳理大量背景故事,因为你处理的是一大堆彼此相对独立的场景,而且没有一份像样的“故事大纲”或文档来明确说明“事情是按这个顺序发生的”。这正是我们想要的,因为我们希望系统能根据玩家的实时动态做出反应,但这也使得准确预判事件发生的顺序变得稍微有些棘手。
所以这其实是一种以模块化方式来组织游戏内叙事场景的方法。
请访问我们的 Steam 策展页面,探索更多 Made with Unity 制作的游戏,并前往 Unity 博客和资源中心阅读更多 Unity 开发者的故事。
