编者按
本文来自 GDC 官方 Youtube 频道,原内容形式为视频演讲,indienova 对其进行了编译整理,以图文形式分享。原链接见文末。
- 演讲人:John Chu
- 译者:Aud42nce
- 阅读下篇:《命运 2》的跨平台联机设计(下)
导言
欢迎来到本次演讲。今天,我们将讨论《命运 2》(Destiny 2)团队实现跨平台联机功能的过程,我们从中学到的经验,以及如果你希望在游戏中加入跨平台联机功能,该如何运用这些经验。
先简单自我介绍:我是 John Chu,Bungie 中央技术组的高级技术项目经理。我负责帮助各个围绕不同项目的团队定义路线图和产品愿景,同时推动各项目的执行。我在 Bungie 工作三年了,曾在不同的团队工作,致力于构建和优化我们的引擎工具,比如改善 UI 设计师的工作流,为优化表现而更新《命运 2》的引擎,以及加快发布时间。目前,我的工作重心是统筹多个团队达成共同目标,最近一个目标则是为《命运 2》加入跨平台联机功能。
这就引出了今天要讨论的主题。我将深入探讨跨平台联机功能的开发过程,以及我们在此期间遇到的挑战和学到的经验。我将更多关注开发流程、团队组织以及设计考量。虽然我会提及一些技术上的挑战,但更多的只是概括,深入的技术细节讨论值得做一次额外演讲。

先向没有玩过《命运 2》的人简单介绍一下这款游戏,《命运 2》是一款动作 MMO 第一人称射击游戏,你扮演一位被光之力赋予力量的守护者,保护人类。你将接受挑战,参与活动,一边射击一边收集战利品,以获取更好的装备并自定义你的角色,成为终极怪物杀手。

在制作、维护和发布《命运 2》方面,我们采用了游戏即服务(games-as-a-service)模式,不断为玩家提供更新和新内容。我们的主要内容发布形式是年度扩展包和每年四次季度更新。《命运 2》于 2017 年发布,现在来到了第 5 个年头,第 16 个赛季。就在上个月,也就是 2 月份,我们推出了“邪姬魅影”和苏生赛季(Season of the Risen)。
《命运 2》目前可在 7 个平台上游玩:PlayStation 4 和 PlayStation 5、Xbox One、Xbox Series X|S、Stadia、Steam 以及微软商店。《命运 2》是基于我们专有的 Tiger 引擎开发的,这个引擎是一个庞大的遗留代码库,最初是为《命运 1》构建的,其中一些引擎部分代码甚至可以追溯到《光环》(Halo)时代。如果你对 Tiger 引擎的历史和发展感兴趣,2015 年 GDC 上 Chris Butcher 做了一场深入的演讲:《〈命运〉:六年磨一剑》(Destiny: Six Years in the Making)。不用说,我们的引擎中有很多系统和代码是基础性的,难以改变,我稍后将讨论这在构建跨平台联机功能时带来的一些有趣挑战。
开发目标

现在来谈谈跨平台联机项目以及我们是如何构建这一体验的。我们想要构建跨平台联机的最大原因是想创建一个真正统一的《命运》宇宙,玩家可以在任何他们想要的地方玩《命运 2》,甚至是通过 Stadia 支持的其他设备。首先,我们在 2020 年上线了跨进度系统,即跨保存(Cross Save),这允许玩家将他们的守护者以及他们花费大量时间积累的所有战利品和装备从一个平台带到他们想要的任何平台。

虽然有了跨平台保存功能,你现在可以在 PC 和主机之间切换,并在想要的地方继续你的守护者的故事,但有一点被忽略了,玩家跨越平台意味着要离开上一个平台上的朋友。玩家对于平台有不同的偏好,就我个人而言,我喜欢在 Xbox 上玩,而且很长一段时间内,我不会在 PC 上玩游戏,也就无法和那些喜欢在 Steam 上玩的朋友一起游戏。
此时就需要跨平台联机功能。它是所有前期努力的结晶,能让你和朋友在你想要的任何平台上一起玩。现在所有玩家都可以加入一个单一的《命运》宇宙,而不是按平台分割的宇宙。虽然这项工作并不是像创建新的团队副本或异域任务那样为玩家带来新内容,但我们知道这样做是正确的,并且会让玩家高兴。因此,我们承诺要实现跨平台联机。
当开始前期开发时,在创造单一《命运》宇宙的总体愿景的指导下,我们总结出了一些抽象的高层次目标。尽管《命运》发布于多个平台,但我们希望利用跨平台联机的机会,将其打造为核心枢纽,让你与游戏中遇到的所有玩家畅享社交互动。无论你在哪里游玩,你的《命运》体验都不应受到限制,任何平台上的每个人都可以成为你的朋友,与你交流,你们可以进行更多交互。

在为这次体验设定目标的同时,我们还确保定下了明确的约束条件,并以此作为决策依据。首先,我们希望尽快发布跨平台联机功能,以提供最佳游戏体验,因此定下了 2021 年 9 月这一发布时间。
项目的前期规划始于 2020 年夏天,我们有一年多时间来规划、开发和发布跨平台联机功能,因此必须根据 Deadline 相应控制项目规模。
此外,游戏体验需要流畅,特别是对新玩家来说。我们不希望让从角色创建到进入第一个任务的体验过于复杂。
最后,我们必须与一级平台合作伙伴展开大量合作,如索尼、Valve、谷歌和微软。尊重每一个伙伴关系非常重要,每个平台都有独特的认证要求,我们应该尽最大努力遵守这些要求。
开发团队

下面谈谈跨平台联机功能的开发团队,有 4 支核心团队共同致力于打造这一体验,包括:
- 引擎/客户端团队。负责底层引擎代码工作,对匹配和网络等功能进行修改。
- UI/UX 团队。负责用户界面相关工作,以让玩家管理所有跨平台新朋友和邀请。
- 服务团队。负责开发所有新的游戏服务功能。
- Bungie.net 团队。负责 Bungie.net 网站和《命运 2》伴侣应用程序的网络和移动端体验相关工作。
总共约有 50 人参与跨平台联机开发工作,包括工程师、测试人员、设计师、制作人等。此外,我们的技术账户管理团队(Technical Account Management)也深度融入项目组,以处理一级合作伙伴关系。
工作室中还有很多人参与了这项工作。发行、市场营销和分析团队帮助我们吸引玩家,并了解他们是如何使用跨平台联机功能的;玩家支持和社区团队提供了玩家反馈;站点可靠性和网络运营团队确保我们开发的服务功能在上线时是完备的。而所有这些都在我们远程工作期间完成。
开发时间线

以上是跨平台联机功能的开发时间线。我们在 2020 年夏天开始前期制作规划,经过大约一年,完成了跨平台联机功能,并在 2021 年 8 月的神隐赛季(Season of the Lost)中正式推出。在这一过程中,有几个里程碑和事件对我们有所帮助。
最初几个月的工作重点是实现跨平台联机体验的主要技术部分,同时与一级合作伙伴会面,以获得对相关设计的批准。2021 年初,我们完成了第一步概念验证,首次实现了两个平台的连通。
我们还利用游戏的实时更新,向玩家推出了跨平台联机的早期版本。在功能正式上线前的那个赛季,我们为 Bungie 员工提供了跨平台联机的 Alpha 版本,启用了一些跨平台功能,后来又发布了 Beta 版本,为所有玩家启用了先锋行动列表(Strike Playlist)的跨平台联机功能。这些早期发布帮助跨平台联机功能迅速传播,并逐步构建玩家体验,我稍后会详细讨论这一点。

即使在正式发布后,我们也在持续为跨平台联机添加更多功能,比如主机文字聊天。将跨平台联机功能交到玩家手中确实花了不少心思,你能在时间线上看到许多里程碑和迭代版本。在这一过程中,我最喜欢的一句话来自工作室内部:“谋事在人,成事在天。”我们尽最大努力以最佳方式执行,为团队、体验和玩家做出正确的决策。
这是我今天想分享的核心思想,因为归根结底,开发过程完全由你掌控,而一旦开发内容交付给玩家,很大程度上你就失去了对它的控制。幸运的是,跨平台联机功能发布后,我们获得了大量玩家的积极关注,成功将他们团结在一起,让他们以一种新的方式游玩和互动。
七条经验
以下是我们在开发跨平台联机功能期间收获的七条经验。
1.建立新系统(Building new system)
在我们的引擎中开发跨平台联机功能意味着从头开始创建许多新系统。跨平台联机是一个相当容易理解的概念,听起来只是将网络数据发送到不同平台,对吧?这的确是其中一部分,但要打造真正出色的跨平台联机体验,还有很多东西需要考虑。

有几个原因导致需要构建如此多的新系统。首先,我们在专有引擎中开发了《命运》,因此所有引擎层面的新的跨平台功能都要从头创建。其次,我们使用的许多系统都是基于平台级 API 的,所有这些都需要在引擎中重新创建以支持跨平台功能(译者注:不同平台上的同一功能/效果可能有完全不同的实现路径和依赖)。与使用 Unity 或虚幻等第三方引擎的游戏不同,这些引擎内置了许多跨平台功能,而我们不得不构建大量平台等效的系统和服务。

为了提升跨平台联机体验,需要许多支撑系统。比如,玩家如何在不同平台上识别自己的身份?为了让所有守护者都能在高塔中相聚,我们要从网络开始,逐一梳理所有系统。为了实现跨平台内容的发送,我们不得不改变核心网络技术。网络变更是最大也是最伤筋动骨的修改之一,因为它是《命运 2》引擎中最基础和最底层的系统之一。
我们针对每一个平台做了优化,但在跨平台联机时,这些优化并不总是能够很好地协同工作。例如,我们的包布局在不同平台上并不总是一致的,所以不能简单地将一个平台的内存句柄通过网络发送到另一个平台。我们最终创建了一个映射层,以便在网络上使用一致的句柄进行通信,这些句柄可以映射到特定平台上的适当句柄。此外,火力小队在线会话的处理方式也必须改变,因为我们不能再依赖由单个玩家托管的单一会话,必须为每个平台维护单独的在线会话。如果你对《命运 2》的网络技术感兴趣,可以观看 2015 年 Justin Truman 的演讲《剑指共享世界:〈命运〉中的联机任务架构》(Shared World Shooter: Destiny's Networked Mission Architecture)。
我省略了许多技术细节,比如我们没有进行网络化处理的部分,但不用说,这些也都是重大的变更,我们需要正确实现它们,以便让各个平台的玩家相互通信,存在于同一个游戏世界中。这是我们最早着手处理的部分之一。

接下来是跨平台联机世界中的玩家身份问题。玩家在《命运 2》中花费许多时间参与团队副本和地牢任务,参与熔炉竞技场,都是为了获得他们最喜欢的极品属性霰弹枪,或是适合自己护甲的正确模块。你扮演的守护者是你个性的延伸,虽然武器装备和护甲外观很重要,但你的名字以及你如何展示自己的身份同样重要。
通常,你会使用平台特定名称来标识自己以及你的游戏角色,比如游戏昵称(Gamertag)或者你的 Steam 用户名等。
然而,在跨平台联机中,仅使用平台特定名称已经不够了。假设你在 PlayStation 上以 Oryx 的名字为人所知,所有朋友都叫你 Oryx。有一天,跨平台联机功能上线,你通过 Steam 进入游戏,但你的个人资料名字是 Savathun。你尝试与朋友们组队,但没人认出你。所以,在这种情况下,使用平台名称已经不够了。
在跨平台联机环境中,重要的是提供一致的体验,让玩家无论从哪个平台登录游戏都能被轻松识别。我们需要用独一无二的名称标识玩家,以便玩家能找到对方。为此,我们引入了 Bungie 名称(Bungie Name)的概念,包括玩家名称和一个四位数的独特标识符,例如 Oryx#1234。这允许多个玩家拥有相同的名称,但通过标识符,人们可以搜索到特定玩家。

秉承之前设定的目标,即在跨平台联机功能上线后不提高新玩家的入门门槛,我们需要确保设置 Bungie 名称的过程既不复杂,也没有额外的时间和操作负担。我们打造了一种无缝体验,从玩家首次登录的平台自动导入 Bungie 名称。上面是启用跨平台联机后,玩家首次登录时看到的界面,这名玩家通过 Steam 登录,个人资料名为 CosmosBNG,系统会在名称末尾添加唯一标识符 0748,如右侧所示,该玩家现在的名称为 CosmosBNG#0748。此名称将显示在其角色上方以及成员列表中(任何平台均如此),成为其统一的身份标识。

接下来是朋友和在线状态。现在,你的好友列表上可能有来自任何《命运 2》支持的平台的玩家,这带来了许多新挑战。《命运 2》是一款 MMO 游戏,拥有许多由深度社交机制培养起来的玩家社群。大多数活动都旨在与他人一起玩,即使你单独玩,我们也会将你与其他玩家匹配,比如在打击任务或自由探索时。《命运 2》的宗旨就是与他人一起玩。
既然玩家现在可以与任何人互动,这意味着我们不能再使用原有的平台好友列表,否则你无法看到在其他平台上结识的朋友。如今,我们将玩家融入了一个全新的《命运》玩家社交网络。我们创建了 Bungie 好友服务(Bungie Friends service)来处理这个全新的社交图谱,使玩家能与任何人互动并成为朋友。
当玩家在游戏内添加好友后,无论对方在哪个平台登录,该好友都会显示在好友列表中。此外,仅依靠平台级的在线状态功能不足以准确追踪玩家的活动情况,因此,我们创建了在线状态服务(Presence service),专门用于追踪玩家的在线与离线状态。随着全新 Bungie 社交网络概念的成型,我们还需确保其具备用户期望它拥有的所有交互功能。

首先是寻找其他玩家,为此要加入搜索功能。我们坚持将 Bungie 名称作为用户标识依据。搜索栏在上图左上角,这正是标识符的关键应用场景。该设计能确保用户精确搜索到正确对象。找到目标玩家后,用户可查看其资料并发送好友请求。在接收端,用户能查看收到的好友申请或待处理请求,并选择接受或拒绝。


此外,屏蔽功能和在线状态显示等其他常见功能也必须加入。随着这套全新好友系统的推出、身份标识的变更以及 Bungie 好友概念的引入,我们不得不对作为玩家主要社交界面的好友列表系统进行彻底重构。为适应跨平台联机需求,我们进行了大量基础架构调整。我们在每位玩家名称旁添加了平台标识图标,同时,为帮助其他玩家准确识别你的身份,我们更新了玩家详情页面,使其能够显示你在所有关联平台上的名称。如上图,这位玩家正在通过 Steam 平台游玩,其平台资料名为 TinyTimGo,但其 Bungie 名称为 CastorRhetoric。这使得其他玩家在查看你的资料时,能更快速准确地识别你的身份。

接下来是对会话或火力小队邀请功能所做的更改。火力小队是由 2 至 6 名玩家组成、共同参与各种活动的小组,相当于你的核心作战小队。火力小队是游戏中最核心的社交与玩法组成部分,也是众多玩家体验《命运 2》内容的主要方式:玩家上线后便会加入好友的火力小队,一同挑战突袭或试炼任务。正如好友列表功能一样,我们此前也完全依赖各平台的原生会话邀请系统。在此之前,加入火力小队的邀请都通过平台 API 发送,如果你在 Xbox 平台游玩,其他人向你发送邀请,你将在 XBox 界面看到一条弹窗消息,显示你收到了邀请。接受后,游戏客户端将启动,并将你的角色加入该火力小队。
但现在,玩家需要能够邀请其他平台的玩家。由于缺乏直接调用不同平台 API 的简便途径,我们不得不从零开始构建另一项独立服务来统一管理火力小队邀请。为此,我们创建了邀请服务,利用原有的通知系统,在界面右下角的灰色通知条显示火力小队邀请。此外,我们还设计了全新的用户界面用于查看和管理待处理邀请,好友请求也会显示在新视图中。接受邀请后,玩家将直接加入该火力小队,这些邀请会在一段时间后过期。
若要实现火力小队的有效协作,成员间的实时沟通至关重要。玩家可通过语音或文字聊天交流,与许多其他系统类似,我们最初的语音系统使用的是各平台原生的语音方案,例如 PlayStation 玩家使用索尼 API,Xbox 玩家使用微软的解决方案等。然而,如果现在依然沿用原方案,大家将无法相互通话。于是,我们迫切需要一个能够跨所有平台对音频进行编码和解码的通用解决方案。因此,我们转而采用第三方语音服务来处理跨平台语音通信。

文字聊天方面,此前只有 PC 玩家能够相互交流,且我们当时仅在 Steam 平台发布 PC 版本,因此,在此种情况下使用 Steam API 是合理的选择。然而,随着跨平台联机功能的上线,《命运 2》也同步登陆了微软商店,原有的解决方案便不再可行。此外,秉承“不让平台限制沟通对象”的核心目标,我们希望让主机玩家也可以文字聊天。为此,我们构建了自己的文字聊天服务,关于自建文字聊天系统以及集成第三方语音解决方案的更多细节,稍后会进一步讨论。

我们之前覆盖的只是针对游戏客户端的系统,但跨平台联机体验还有更多内容。在构建跨平台联机功能时,一部分体验需要同步至网页端和移动端。此时,我们有 Bungie 的帮助。
Bungie.net 官网与《命运 2》移动应用为玩家提供了进一步的游戏体验管理与互动方式。唯有通过 Bungie.net,玩家方能整合所有关联平台的好友列表,并查看其 Bungie 好友列表。此外,相较于发布游戏客户端更新,网页端与移动端的迭代速度要快得多。通过将高阶跨平台联机功能建立在网页和移动端上,我们能够更快速地迭代和优化这些功能。
强大的网页端体验提供了至关重要的应急解决方案,特别是在游戏出现程序漏洞时发挥了重要作用。例如,当游戏推出玩家搜索功能时,该功能暂时出了问题,导致玩家无法直接添加好友。我们及时将玩家引导至网页版和移动端搜索目标用户,直到第二天发布修复补丁。总体而言,为实现完整的用户体验,我们投入了大量工作。

在构建围绕跨平台联机的众多新系统的过程中,我们总结了以下核心经验。首先,当处理自研游戏引擎时,其中的许多核心与基础部分需要更改,例如调整底层网络架构和彻底改造用户界面。这意味着,当你选择自主研发跨平台技术时,必须充分考虑其庞大的项目规模,并为此预留额外时间。
其次,在构建跨平台联机功能时,游戏的许多现有系统很可能依赖特定平台的 API 和功能。这些功能中的大多数都需要重新构建。如果你使用第三方引擎,如 Unreal 或 Unity,情况会有所不同,因为它们的许多服务和系统具备跨平台可移植性。但重要的是要仔细评估哪些系统是依赖平台技术开发的,需要进行跨平台迁移。
第三,将跨平台体验延伸至游戏客户端之外,覆盖玩家与游戏互动的所有场景,可能很有价值。这也便于玩家对开发团队新引入的系统做更精细的控制。我们从项目伊始就将网页端与移动端纳入考量,最终打造出了连贯一致的整体体验。
2.处理相互依赖(Dealing Inter-dependencies)
大家已经对实现跨平台联机所涉及的各个系统有了基本了解,现在应该能更深刻地体会到这项大型跨团队协作项目的庞大规模。此类规模的项目必然伴随着所有参与团队之间大量复杂的依赖关系,这些关系都需要被有效地管理。

四支团队分别负责体验的不同部分,这意味着存在许多相互交织的依赖关系。更麻烦的是,开发时间紧迫,需在 2021 年 9 月前交付。因此,确保所有团队的工作畅通无阻显得尤为重要。
此外,由于全员远程办公,协调同步也变得复杂。我们无法再像过去那样,随时在走廊或工位旁见面并闲聊。你也不能方便地走到同事工位旁直接请教问题,这种原本能顺利化解许多疑问和麻烦的沟通方式,在居家办公时难以采用,因为你总得先发条消息找人。

我们是如何应对这一问题的?很幸运能有如此多的成员共同致力于开发工作,然而人员增多也带来了问题:确保所有人朝着同一目标努力变得更困难。为此,我们格外强调团队的协同一致,并尽可能提供了多种渠道,以便及时发现任何成员所遇到的阻碍与待解决问题。
我们着力创造尽可能多的契机,确保团队全员始终朝着同一目标戮力同心。尽管由我这位制作人来说显得有些陈词滥调,但是,在居家办公的背景下,高频次的同步沟通与定期会议无疑成为了核心解决方案。

通过定期召开同步会议,并分别按功能领域(所有服务于通信或聊天功能的成员)和职能(全体测试人员或全体工程师)筛选参会者,能够使讨论聚焦于特定主题,例如悬而未决的问题,或是某些功能即将进行的集成工作。
受益于这种方式的一个例子是,我们每周会举行一次关于“好友与在线状态”功能的专题同步会议,集中讨论 Bungie 好友服务如何与用户界面及客户端内所有其他模块交互。我们意识到,必须解决在跨平台联机环境中屏蔽功能如何运作的问题,这正是当时大多数成员的共同困惑。
我们让工程师和设计师共同参与讨论,迅速明确了具体改进点。后续又在每周的工程同步会议中跟进,集中评估特定技术方案的可行性,例如如何将数据准确传输至目标位置。
此外,还有定期举行的全员例会等常规机制,邀请所有核心团队成员参加。这确保了每个人都能亲身感受到团队是如何协同工作、推进项目的。
综合以上各点,可以清楚地看到,我们通过让团队成员之间进行充分接触和了解来增强凝聚力,使他们能够主动识别并解决问题。

总而言之,安排专门的同步会议能够确保组内问题可提升到跨团队层面并得到快速处理。通过以多种方式划分团队来组织同步会议,可让团队有机会在不同规模和深度上讨论问题。
接下来,当管理一个大规模,同时可能远程办公的团队时,确保所有成员保持目标一致和行动协调至关重要。为团队创造尽可能多的线上或线下见面机会,能够有效促进成员间的主动沟通,使成员更愿意随时向任何同事寻求帮助。这有助于让每个人更清晰地认识到自身工作与整体目标之间的关联。
如果你在听到这些关于同步会议、常规会议和工作组的内容后,心想“会议也太多了吧”——确实。通过同步会议来建立团队共识确实需要付出代价,这消耗了一线工作者专注于实际工作的时间,构成了团队管理的间接成本。因此,找到两者之间的平衡尤为重要。不得不承认,我们最初也过度依赖同步会议。过多时间花在会议上,意味着实际工作时间不足。但很快,我们通过减少团队总体会议时长,对协作流程进行了迭代优化,最终找到了更合理的工作节奏。
原链接:https://www.youtube.com/watch?v=CKe5s2Hb6aE&list=PL2e4mYbwSTbao5I-cAVbanrMNVGgGN7O3&index=52
*本内容系编译整理,不代表 indienova 立场。未经授权允许,请勿转载。


暂无关于此文章的评论。