为了玩法,重做系统

继《双人成行》之后,Hazelight工作室的新作《双影奇境》再度掀起“双人合作游戏”的热潮,在发售七日后,销量就已达到200万份。

相较于单屏游戏,双屏合作游戏的实现难度倍增,但《双影奇境》在为玩家提供了各种天马行空的创意玩法的前提下,保证了丝滑的操作手感和极其舒适的游戏体验。

为了弄清这些玩法究竟是如何实现,竞核在GDC大会上慕名聆听了Hazelight工作室的玩法程序设计师Ylva Werner的演讲,从中了解了Ylva及其团队所搭建的核心系统、该系统的优势与成本以及在游戏中的具体实现。

这位经验丰富的开发者在演讲中侃侃而谈,晦涩难懂的专业词汇在她的讲述下就如同块块积木,最后严丝合缝地构建出了一个动态、庞大又极具实用性的系统模式。



做决策的不是组件,而是游戏对象

2017年,Ylva Werner以工具与玩法程序员的身份在《绝地潜兵2》里大约工作了4年,后加入了VR游戏《吸血鬼:避世血族-正义》的开发,最后在2023年春天,成为了Hazelight工作室的一员,开始为《双影奇境》进行玩法实现。


在《双影奇境》中,Ylva及其团队构建了包含150万个核心逻辑单元的玩法体系,里面可能有超过10000个可交互的玩法节点。

Ylva认为,当脱离《双影奇境》的特定语境讨论系统设计时,必须审视全局工具的独立性。他们基于虚幻引擎构建了不同于当前主流游戏引擎采用的TCS结构的新型组件架构。在新的架构中,行为控制完全由功能模式(Capabilities)接管。而对于TCS,Ylva指出,在2017年的GDC大会中《守望先锋》的程序师已经讲得很透彻了。

Ylva向人们展示了玩家使用弓箭时进行动态瞄准的场景,右侧调试面板中的功能单元会实时激活而显示为绿色,这代表着瞄准校准、轨迹、蓄能等反馈模块的协同运作。相较于组件模式的TCS,功能模式的优势在此展露无遗——更能实时且精准地反馈游戏对象。


这个设计源于《逃出生天》(A Way Out)项目的技术复盘,当时程序设计师们由于多重组件相互干扰而深受困扰,尤其是在联机同步时还存在大量不可控因素。因此,在《双影奇境》立项之初就确立了的核心准则:组件仅作为数据容器,所有行为逻辑必须上移至游戏对象(Game Objects)层实现。

这一准则显然是实现《双影奇境》各种玩法的关键前提,为此,Ylva特意又强调了一遍:

“做决策的不是组件,而是游戏对象。”


而在游戏开发中经常会出现某个代码块承载了超出其职责行为的情况,比如把所有逻辑编码都堆砌在一个类上,结果导致代码库膨胀过度,从而使系统陷入混乱。Ylva等人针对这种情况,做了破局之法:把游戏行为抽离成功能单元,只有当行为的复杂程度超出限定阈值,才需启动备用的功能模式。

例如,在Ylva等人的设计架构中,弓弦蓄力的数值会被写入弓箭组件,与此同时,射击校准的数值也通过读取该组件来判断是否达到发射阈值。这种数据驱动模式还延伸至动画系统:当动画需要同步表现拉弓动作时,同样通过读取同一组件的蓄力值来决定下一帧的骨骼姿态。

这种多个功能模式共享读取同一个组件数据源的架构打破了传统“组件和行为”一一绑定的关系,使得组件和行为不再是线性对应,而是以数据流为纽带而构成的动态协作网络。通过这种模式,设计师们可以精准每个功能的触发链路。

此举似乎打破了开发过程中的技术壁垒。在《双影奇境》的团队中,只有13名程序设计师。但在原型验证阶段,功能模式的创建使得其他团队成员无需依赖他们,自主便可完成大部分行为逻辑的装配,大大提升了开发效率。


为了直观展示功能模式的设计,项目组还建立了“自由创作日”,在特定的周期内允许所有人用这套系统自由创新玩法。在活动中,这套系统极大地激发了大家的创造性,不仅有些玩法顺利融入既有关卡,还有玩法被纳入了主线。

讲到这里,Ylva终于明确了她所说的功能(Capability)的定义:是一种包含状态、事件、转换规则,以及具有决策性的代码系统。尽管这和常见的状态机(State Machine)非常类似,但实际上是有本质差别的。


功能模式能够实现多功能并行激活且具有优先级转换能力,可以智能协调冲突的行为。例如,当玩家忽然切换武器时,相关功能模块将被自动触发而不需要先回到预设状态。

程序团队还为特定关卡装载了特殊的功能板块,例如“攀爬能力”、“滑索能力”等等。这些能力可以有效规避传统状态机中常见的更新时序冲突。比如“应急坠落能力”就被设定为最低优先级,仅在所有行为相关功能均未触发时才会激活,确保了所有行为都能优先响应玩家做出的指令。

而构成触发器的则是由5个关键函数(ShouldActivate, ShouldDeactivate, OnActivated, OnDeactivated and TickActive)所组成的触发轴,几乎可以套用所有行为逻辑。在传统的组件方案中往往需要在基础功能中内置大量特殊条件进行判定,但在Ylva等人设计的模式下,特殊情况都被包含在可推断的行为内,从而能在保持核心代码简洁性的同时,让系统具有一定“弹性”。



复用、开发与增效

当然,设计师们在背后所付出的不止如Ylva所展示的这些,为了让玩家能体验到更加流畅丝滑的角色动作,他们还为这一模式添加了各种行为表单(Sheet),以此来为玩法增添更多趣味。


如此实用的功能模式自然不能只使用一次,Ylva表示他们建立了一套独特的代码管理范式。有些逻辑相通的行为只需要调整配置表中的相关参数,即可形成新的独立单元。通过不断复用和创新代码,团队最终以惊人地迭代速度构建了超过10000个交互玩法的单元,且将行为冲突率降到一个极低的数值上。


Ylva指出,为了实现游戏资产化管理,他们专门设计了一种可视化参数面板,所有核心功能单元必须通过C++实现,严禁在底层蓝图中创建额外的功能类型。这种自我约束确保了核心系统的纯粹与完整,且降低了服务器的耗能。

不仅是程序设计师,其他团队的成员也能利用可视化窗口,在无需重新编译模块的情况下,让所有修改即时生效,从而灵活调整开发内容。Ylva还补充道:“这些提升效率的优势远远大于我们开发它的成本。”

这一点似乎引出了Ylva在演讲最初时提出的“优势与成本”:由于减少了代码冗余,CPU获得了更加充足的计算空间,导致响应速度加快,反馈给玩家的就是更少的失误和更舒适的体验。

更难能可贵的是,Ylva等人开发的内容还具有一定动态调节能力。双屏实时动作实现的难度要大于单屏,但这种功能模式使得部分关卡能在不编写任何代码的情况下,通过内置的调节器动态改变谜题的难度曲线,快速实现团队想要达成的效果。

在谈到游戏实例时,Ylva向人们展示了BOSS战的攻击模块。如她所言,团队使用的功能模式压缩了误差传感的时间,玩家能够更加实时的进行游戏行为而不会因系统而被延误,例如在实现二段跳的同时采取攻击行为,并不会造成如传统组件模式下的行为紊乱。


动态的实现不仅停留在玩家所操控的角色行为上,游戏场景同样被赋予了动态变化。例如在激光机关响应的环节,光源会随着玩家的行为以及玩家所处的环境发生变化。

“双向奔赴”的热爱

Ylva团队的设计在行动系统、AI行为树、战斗反馈、动态谜题以及环境叙事上都展现了非凡的适应性,这不仅是技术上的优化升级,也是一次设计思维的革新。Ylva表示她并不是想否认过去的架构,也不是想要让所有人都接受他们的方式,而是更希望通过这次的分享,让所有对程序和玩法开发感兴趣或愿意为之付出心血的人有所启发,就像她几次都在GDC活动中从其他开发者处获得灵感一样。

“我希望大家能够拓展这些功能,开发它们更多的潜力。”Ylva在演讲的最后期许道。


而如何激发身处团队的开发者的潜力,似乎与团队本身的氛围和管理紧密相关。

在演讲结束后,当竞核向Ylva询问,为了使游戏调性保持一致,在开发玩法时是否需要同叙事等其他相关团队进行高度协作时,Ylva告诉竞核,叙事等内容是他们的游戏制作人Josef主要负责,而作为玩法程序员的她被给予了很大的自由度,比起协作,他们更像是在共同创造游戏中的种种有趣时刻。

到此为止,Ylva的演讲和回答都充满了理性和严谨。不过,竞核提及《双影奇境》有非常多的中国粉丝时,这位言语缜密的程序设计师第一次显得有些激动和“语无伦次”。

“哦!我不知道该说什么好。我是说,我其实非常自豪和惊喜。说实话,虽然我们没有直播也没有在平台上留言,但我们一直在尽量多看大家发的内容。对于我们开发人员来说,(这部游戏)真的倾注了非常多的心血,所以真的很高兴大家能喜欢。(有时候)看到大家的反馈很有趣——好吧,我得说,那些反馈真的很暖心。”

除了实现所有想要达成的创新玩法,这似乎是所有开发者们都希望得到的反馈:玩家热爱他们的游戏。

而这些热情与赞扬终将化为动力,让备受鼓舞的开发者们干劲十足地创造下一款游戏。


*爆料丨合作丨招聘:点击戳微信号 luoxuanwan111


ad1 webp
ad2 webp
ad1 webp
ad2 webp