回声编织者在 Unity 6 中构建一个时间Loop的迷失脑(metroidbrainia)

Oct 8, 2026|8 最低
Fergus Baird
Fergus Baird - Unity Technologies
Senior Content Marketing Manager
Made with UnityGame design
由 Moonlight Kids 和 Akupara Games Made With Unity 。一个浸透着NEON的卡通图像,从肩膀以上展示一个白眼白发的形象。他们两侧有几位角色,包括(顺时针方向)一只拿着披萨的猫、一个蓝发的人、一个蜥蜴人、一个骨骼昆虫、一个留着灰发戴着护目镜的老妇人、一个戴着面具的人物,以及一个暴露着Brain的外星人。

为方便起见,此网页已进行机器翻译。我们无法保证翻译内容的准确性或可靠性。如果您对翻译内容的准确性有疑问,请参阅此网页的官方英文版本。

回声织机由 Moonlight Kids 和 Akupara Games 联合开发的备受期待的类银河战士游戏《银河战士》今日登陆PC和主机平台。我们采访了游戏设计师Chris Sumsky 和程序员 Ankit Trivedi,讨论了知识门控设计、循环重置架构,以及他们会向其他使用Unity制作游戏的小团队传授的经验教训。

当由三名成员组成的独立工作室Moonlight Kids开始开发《Echo Weaver》时,他们认为自己找到了游戏开发中最臭名昭著的系统之一——存档状态——的漏洞。

Chris说:“如果有人丢失了存档,你就会成为他们最大的敌人。”该团队在他们的首款作品《野性之心》(The Wild at Heart)中遇到了存档错误​​的问题,因此《回声编织者》(Echo Weaver)的时间循环设定对他们来说简直是梦想成真:“我们当时就想,没救了!”穿越Time!一切都会重置!

当然,游戏开发中的事情很少这么简单。Echo Weaver以流媒体形式呈现其相互连接的世界,没有加载画面,这意味着当玩家在世界中探索时,游戏必须不断加载和卸载地图的各个部分。这会造成以下情况:玩家在这个循环中是否打破了捷径墙?他们和那个NPC对话了吗?Echo Weaver的世界必须保持一定关卡的持久性,至少要等到玩家时间耗尽、循环重新开始为止。“所以结果我们还是得把所有东西都保存下来,”Chris说。“但当出现问题时,危害较小,因为玩家总是可以重置循环。”

回声织机

一款太空跑酷侦探游戏

在《回声编织者》中,没有技能门槛。从游戏玩法的第一分钟起,游戏世界就完全开放,但如何充分探索这个世界则取决于玩家自己。“我们内部提出的方案是‘太空跑酷侦探’,”安基特说。

Chris说:“想象一下,你要make一款游戏中所有东西都不会持久存在的游戏。”“玩家需要感受到的所有进步感都已经存在,只是被层层秘密掩盖了。”这就是我们用Echo Weaver做的一件既大又奇怪的事情。对我来说,这既是最酷的事情,也是最大的挑战,因为任何人都有可能在任何时候偶然发现自己拥有某种能力。

在开发初期,团队将该项目定位为对《我心狂野》的刻意回应。“当时,这个项目卖得并不好——幸运的是,后来情况发生了变化——所以我们竭尽全力反对这个项目。Chris说:“我们想make一些更黑暗、更硬朗的作品。”“当然,这意味着我们违背了自己的长处——我们很快就意识到了自己的报错!”

回声织者 | 月光儿童 | Akupara Games

《回声织女》从《野性之心》中沿用下来的许多元素,构成了 Moonlight Kids 工作室的基石,从联合创始人兼创意总监 Justin Baldwin 的手绘风格(“甚至连画笔和调色板都一样”)到充满秘密的大型互联空间,以及在通常不注重细节的类型中坚持细致入微的叙事。

在技​​术方面,团队的内部工具库也从《野性之心》中得到了飞跃,包括对话系统、 FMOD接口层、控制器和动态输入图标代码以及屏幕抖动。

回声织者 | 月光儿童 | Akupara Games

核心设计原则:织工记得

由于没有能力限制,而且世界会在每次循环中重置,《月光小子》需要制定规则来决定哪些内容会在两次循环之间保留下来。他们最终找到了一种不会破坏沉浸感的叙事解决方案:玩家扮演的角色“织梦者”会在循环中保留自己的记忆。“任何他们自己能记住的东西,我们都可以纳入考虑范围。”“如果织工看到了,玩家也应该看到了,”Chris解释道。“这并不违反类银河战士脑残粉规则。”

这一决策影响着整个游戏,从跟踪玩家已解锁知识的进度屏幕到关卡呈现方式。当隐藏区域被发现时,前景的艺术作品就会消失。在游戏测试期间,这种情况不会在循环中持续存在,但团队发现玩家总是忘记他们发现了哪些捷径,因此他们做出了让步,永久淡化了玩家最常访问区域的前景。

回声织者 | 月光之子 |Unity

关卡设计不走永久捷径

选择利用玩家的知识而非指定的升级来限制游戏进程,会从标准关卡设计师的工具箱中移除一个重要的工具。类银河战士恶魔城游戏通常依赖于单向墙和永久捷径——打破一堵墙,这条路就会在游戏的剩余流程中一直畅通无阻。Chris说:“在像《回声编织者》这样的时间循环游戏中,当你打破一堵墙并重置循环时,那堵墙又会重新出现。”“那并非我必备的技能。”

该团队针对此问题提出的解决方案在两个尺度上都适用。在一个循环中(根据玩家收集的时间,该循环可以运行几分钟),Chris能够运用传统的类银河战士恶魔城游戏设计技巧,因为在一个循环中包含的任何东西都可以在该循环中获得回报。团队在设计游戏的每个关卡分支和区域时都考虑到了这一限制。

对于更大更复杂的捷径——“想想《黑暗之魂》中的传火祭祀场,”Ankit 说——唯一真正的选项就是隐蔽。通道的一端可以隐藏在前景艺术品的后面,另一端则可以位于前景中,从而创造出一个隐藏在众目睽睽之下的秘密。“像《Tunic》这样的游戏在透视做得非常出色,”他补充道。

回声织者 | 月光儿童 | Akupara Games

管理球员时间

Echo Weaver的时钟是其最突出的系统,玩家始终可以看到它。每个循环开始时,计时器显示时间为 1 分钟。玩家可以寻找时间水晶来延长时间,也可以牺牲水晶来治疗;找到合适的平衡点对于成功至关重要。

在游戏的早期版本中,计时器会一秒一秒地倒计时,但测试玩家非常讨厌这种方式。Chris说:“这造成了很大的压力。”“有一天我们突然想到,如果我们把时钟拿走会怎么样?”你其实不需要知道秒数——你只需要知道分钟数即可。

最终的HUD是一排时间块,每个时间块代表一分钟——在游戏中,这些被称为“铃铛”,因为 NPC 说出“8 分钟后再来”之类的话破坏了游戏的沉浸感。世界上几乎所有事物的发生都围绕着这持续一分钟的节拍精心安排。测试玩家对这个新系统给予了积极的反馈,并很快发明了“启动序列”——经过高度优化的开局路线,可以在循环开始的最初几秒钟内节省大量时间。

回声织者 | 月光儿童 | Akupara Games

时间循环是如何运作的

那么,当Echo Weaver中的时间循环重置时会发生什么?Ankit 的架构将游戏世界划分为多个区块,每个区块都带有一个区块脚本,并采用自定义编译版本流程预先移除昂贵的内容。

沉重且不变的图层——所有世界几何体和过渡标记——被烘焙到场景中,并永久保持加载状态。一个轻量级的“基本要素”场景保存着易变状态:游戏管理器、玩家和特定于运行的数据。重置时,游戏会卸载活动区块,完全丢弃基本场景并重新加载,只重新加载循环开始序列所需的区块。

“这是我们缓解问题持续存在和不应该存在的问题的一种重要方法——我们直接扔掉它,然后重新做,”安基特说。“反正这只是个很轻松的场景,所以拆掉重做也不是什么大问题。”

特定于运行的状态存储在内存中的string键字典中;清除该字典是重置的一部分。任何需要在循环中保留的信息——循环次数、他们见过的能力、他们交谈过的角色——都会被序列化到磁盘上。每个对象在接收到数据块时都会检查自己的键,通常只是读取一个bool或int。

这种方法并非完全没有缺陷。Ankit 发现持久化过渡门在循环之间无法完全重置其UI状态,所以他干脆停止持久化它们。现在,每扇门的交互组件都是一个克隆体,每次重置时都会重新实例化。“如果只有 20 个物体,那就没关系——不会对性能影响,”他解释说。

像钥匙这样的可携带物品带来了一个更微妙的问题:一个存在于一个区块中的项可以被带到游戏世界的任何地方,而区块级所有权意味着这些物品要么从玩家的物品栏中消失,要么被复制。为了解决这个问题,团队将元素移动到了持久场景层。

Echo Weaver 的分层环境资源在编辑器中

优化一个精细的手绘世界

与《野性之心》一样, 《回声织者》也充满了定制的手绘艺术——虽然视觉效果惊艳,但加载和渲染成本可能很高。团队实施了多项改进措施以最大限度地提高性能。

Asset压缩

他们解决第一个重大性能难题的方案却令人失望。“我们所有的图集None没有启用压缩功能,”安基特笑着说。启用压缩功能后,内存中的所有内容减少到大约 1 GB。

在Unity 编辑器中查看 Weaver 的动画

场景加载

加载中游戏则遇到了更棘手的问题。实例化同步地在主线程上进行,因此装饰性资源在编译版本时从块中剥离(保留大小、旋转和精灵设置的ManualOverrides ),然后异步地重新实例化,每帧分批处理几个对象。结合始终保持相邻区块加载的邻近系统,弹出式加载现象不会影响视觉效果。

批处理

由于 Justin 的手绘作品避免重复图案,批量处理的机会很少,因此 Ankit 编写了一个工具,可以将一组精灵展平为单个图像(以及单个绘制调用)。例如, Echo Weaver的一个生物群落中的天空是由数十个几乎相同的平台构成的;他们利用该工具将其合并成两个复合精灵,并添加了一些独特的装饰。

打光

Echo Weaver最初的照明设备价格昂贵。Sprites最初最多可以包含四种不同的光照类型(背景、玩家、项和地板变体),而且一度可以同时渲染 16 种不同的光照纹理。Ankit 说:“将六个灯光层合并成三个灯光层可以大幅减少灯光数量,而且我认为视觉效果并没有因此受到影响。”

水的效果

水资源来自Unity Asset Store:Game2D Water Kit ,running于通用渲染管线之上。“非常灵活,能产生非常好的效果,”Ankit 说——但是每个水体都会重新渲染相机,成本会随着水面下折射的图层组的数量而增加。该团队整合了水下图层,发行商 Akupara Games 的内部移植团队针对低端硬件进行了更进一步的改进,将插件的伪水面进入透视效果与其折射设置分开,以便性能较弱的设备无需重新绘制即可保持外观。

回声织者 | 月光儿童 | Akupara Games

调试

Unity 的帧调试器在这项优化工作中发挥了核心作用,它使 Ankit 能够逐帧绘制调用绘制调用,并准确地看到批处理在哪里出错以及原因。从那以后,工作重点就变成了整合:统一材质、转换散落的精灵、重新检查,直到尽可能多的帧被批处理。“你仍然可以看到偶尔会出现批处理中断的情况,”他说,“但这种情况比以前少得多。”Ankit 给其他团队的建议很简单:“立即开始大量使用帧调试器!”

回声织者 | 月光儿童 | Akupara Games

从 2021 LTS 到Unity 6

《野性之心》采用Unity 2021 引擎发布; 《回声编织者》采用Unity 6引擎发布,并在发布前不久锁定为一个版本。当被问及不同版本之间每天的变化时,Chris毫不犹豫地回答:“嵌套预制件和编辑模式——它们彻底改变了我的生活。”

Ankit 表示,团队大量使用了Composite Collider 2D和 Unity 的原生对象池,这意味着他终于可以停止维护他为《我心狂野》编写的自定义对象池了。他指出:“在适用的情况下,使用内置功能是件好事。”

回声织者 | 月光儿童 | Akupara Games

给小型团队的临别建议

在采访的最后,我们问Chris和安基特,他们会给其他想要使用Unitymake游戏的开发者分享哪些技巧。

“我可能会因此被嘲笑,”安基特先说道,“但传统观点认为不要过早优化。”我不认为这是真的。你可以尽早构建高性能的系统架构,这实际上可以为你节省很多后续时间。

团队在项目早期就实现了Echo Weaver的分块流系统。从一开始,粒子就被聚集在一起。Ankit 总是尽量谨慎对待 C# 的便利性,因为垃圾回收的压力会很快编译版本。“如果你想发布一款游戏,最终它必须性能良好。”为什么要把自己逼入绝境,让事情看起来不可能解决呢?以后要让系统达到最佳性能,就意味着要进行巨大的变革。

Chris就设计提出了一些建议,并强调了依靠工作室的创意特色的重要性。“制作这样一款需要掌握知识的游戏,高度依赖于全局观,”他说。“我们花了数年时间反复修改,但只有当整个项目整合完成后才能完成这些部分。”很多内容原本可以像电影剧本那样提前写好,同时又能留出很多迭代的空间。”

但他有一件事会做不同的,那就是相信自己的直觉,坚持做自己熟悉且感觉正确的事情。“事后看来,我们当时说‘好吧,既然没人想看《我心狂野》 ,那我们就去做一些完全不同的事情’,这是错误的。”人民想要什么?不——要真正发挥你的优势。我们浪费了很多时间去弄清楚如何应对市场。最后我们都懵了,心想我们到底在干什么?做你擅长的事。做你make的游戏。

《Echo Weaver》今日在Steam、 PlayStation®5、Nintendo Switch™ 2、Nintendo Switch和Xbox Series X|S 平台发售。在我们的Steam鉴赏家页面上探索更多Made with Unity的游戏,并在Unity博客和Resource中心检查更多来自Unity开发者的故事。


Nintendo Switch是任天堂的注册商标。