
《使命召唤》的网络代码 - 多人游戏开发的见解

网络代码(Netcode)可以说是任何多人游戏中最关键的组成部分之一。
之前,我们已经深入探讨了《使命召唤》(Call of Duty)基于技能的匹配机制深度白皮书中适用于所有多人游戏开发者的见解。
在本文中,我们将涵盖关于世界上最受欢迎的在线游戏之一——《使命召唤》(Call of Duty)及其网络代码,适用于所有多人游戏开发者的关键见解。这些见解源自动视(Activision)在2019年发布的官方解释,由时任 Infinity Ward 制作总监的 Paul Haile 和时任在线工程总监的 Mitch Sanborn 提供。
基础:理解客户端-服务器架构
《现代战争》(Modern Warfare)采用客户端-服务器模型运行,其中多个客户端与一个中央、权威的服务器进行交互。每个玩家的设备充当客户端,不断向服务器发送输入数据,同时接收世界状态更新作为回报。服务器对游戏状态保持最终决定权,处理所有玩家的输入并将结果广播回每个连接的客户端。
这种权威性的方法确保了所有玩家之间的一致性。当你开火或移动角色时,你的客户端和服务器都会同时处理这个输入。然而,只有服务器的版本才会成为所有其他玩家看到的官方游戏状态。

什么是在线游戏网络代码?
网络代码涵盖了在实时多人游戏体验中同步多个玩家之间游戏状态的所有网络系统。它处理数据传输、预测算法、延迟补偿,以及在不同客户端报告冲突信息时的冲突解决。
现代网络代码的作用远不止简单的数据交换。它包括复杂的预测系统、回滚机制和动态自适应策略,以在网络不完美的情况下保持可玩的体验。该术语最初用来描述游戏引擎内的网络代码,但现在代表了启用在线多人游戏技术的整个生态系统。
有效的网络代码必须平衡多个相互竞争的优先级:响应性、一致性、公平性和可扩展性。
网络代码是做什么的?
网络代码执行使多人游戏得以运行的几项关键功能。它在所有连接的客户端之间同步玩家位置、动作和游戏状态变化,同时在网络延迟和数据丢失的情况下保持一致性。
该系统根据当前趋势预测未来的游戏状态,从而使游戏即使在数据包延迟或无序到达时也能继续流畅运行。当预测被证明不正确时,回滚机制会将游戏状态倒退到分歧点,并用正确的信息重新播放事件。
网络代码还实施延迟补偿技术,在确定击中判定和玩家交互时,将网络延迟考虑在内。这些系统确保具有不同连接质量的玩家可以公平竞争,而不会产生明显的劣势。
此外,现代网络代码还包括作弊检测和验证系统,这些系统会根据服务器预期验证客户端数据。这可以防止恶意玩家操纵其本地游戏状态以获取不公平的优势。
当网络失效时:丢包的挑战
网络中断主要以两种方式显现。第一种发生在客户端无法接收服务器数据时,使玩家失去了关键的世界状态信息。没有这个数据流,客户端游戏实际上就不知道接下来该渲染什么。
第二种情况涉及服务器丢失客户端的输入数据。传统的方法只是简单地冻结受影响的玩家直到数据到达,然后立即将他们传送到新位置。这会产生刺眼的视觉伪影,使游戏无法进行。
无线干扰、运营商流量整形、CPU 峰值和路由器缓冲都会导致数据包传输的变化。这些因素会导致数据在客户端和服务器之间传输所需的时间出现不可预测的延迟。
三管齐下的解决方案策略
Infinity Ward 根据网络状况采用三种不同的策略。
缓冲(Buffering)实时分析数据包传输速率,使客户端尽可能接近服务器的最新数据,而不会产生视觉卡顿。系统动态地调高或调低客户端更新率,以维持这一精准的平衡。
外推(Extrapolation)获取最后接收到的输入,并假设玩家在收到新数据之前继续进行相同的动作。这对于一致的移动非常有效,但当玩家突然改变方向时,可能会导致视觉上的“闪现”。
预测(Prediction)将外推的输入视为权威的服务器数据,为所有玩家创造平滑的移动。然而,过多的预测会导致网络遇到问题的客户端无法进行游戏。
《现代战争》的引擎同时支持这三种方法,根据对每个独立客户端的实时网络分析来混合使用这些策略。这可以防止网络连接较差的单体玩家影响整场比赛的体验。
“死在掩体后面”现象解析
在到达掩体后死亡这一经典的挫败感,正好体现了网络代码原理在实际中的应用。当你暴露在外并看到狙击手镜头的反光时,你决定奔跑的选择会产生一连串复杂的网络事件。
你暴露的位置传输到服务器,服务器更新你的位置并将其广播给其他玩家。狙击手看到你处于开阔地并开火,将该动作发送回服务器进行权威处理。然后,服务器将击杀结果发回给你。
系统总延迟决定了你在掩体后面看起来有多深的地方死亡。外推实际上可以通过在实际数据之前预测玩家位置来减轻这种影响,当预测被证明准确时,可以有效地击败数据包往返时间。
数据驱动的优化
Infinity Ward 的方法超越了初始开发,扩展到了基于真实世界数据收集的持续优化。该团队持续监控服务器和客户端的行为,从单个玩家的体验中收集遥测数据,以识别改进机会。
测试版(Beta)测试数据证实了他们缓冲方法的有效性,该系统始终运行在最佳阈值内,而不会频繁越界。这种数据驱动的方法在游戏发布后,通过对活跃玩家群体的定期测试得以延续。
结论
《使命召唤:现代战争》的网络代码展示了在技术限制与为全球数百万玩家维持可玩体验之间的有趣见解。该系统在缓冲、预测和动态策略混合方面的先进方法,展示了现代多人游戏如何处理实时网络带来的固有挑战。
来自 Infinity Ward 工程团队的见解表明,优秀的网络代码并不是要消除网络问题,而是在网络问题不可避免地发生时,能够优雅地处理它们。
他们从坚实的低延迟基础开始,并在其上构建强大的容错系统的方法,为在要求最高的多人游戏环境中维持质量提供了蓝图。这种网络代码是定制构建的,因此大多数开发者无法使用。
幸运的是,Edgegap 的匹配器是唯一广泛可用且集成了延迟规则的匹配器。由于它已完全集成到 Edgegap 的编排器中,因此它也接入了全球最大的边缘网络——这允许你的多人游戏将游戏服务器部署到离用户最近的地方。平均减少 58% 的延迟,并为 78% 的玩家群体提供低于 50 毫秒的延迟。
---
本文基于并引用了动视在其官方说明上的原创文章。原创内容中的所有权利均归其各自所有者所有。
书写者
Edgegap团队









