了解Edgegap的工作原理

了解Edgegap的工作原理

最简单的 Unity 网络代码供游戏开发者使用

已发布

已发布

已发布

最后更新时间

最后更新时间

最后更新时间

最近一次准确性审核

最近一次准确性审核

最近一次准确性审核

最简单的 Unity 网络代码供游戏开发者使用

游戏开发十分复杂,其组件通常数量众多,而且其理解难度和它们的命名一样复杂。在本指南中,我们的目标是为初学者和独立开发者揭开游戏服务、工具和技术复杂性的神秘面纱。

首先从对多人游戏至关重要的部分开始:网卡代码 (netcode)。

理解 netcode 对于创建引人入胜且无缝的多人游戏体验至关重要。让我们来了解一下它是什么、为什么它很重要,以及当今 Unity 中可用最简单、最有效的 netcode 实现。

什么是 Netcode?

Netcode 是一个概括了视频游戏网络方面的术语,特别是在多人游戏设置中。它是负责在玩家设备和游戏服务器之间交换数据的技术,这被称为“同步”,它确保一个玩家执行的操作能立即且精确地反映在另一个玩家的游戏环境中。

由于全球玩家面临不同的延迟和连接质量,这种同步具有挑战性。有效的 netcode 考虑了陈旧或不佳的玩家机器配置,力求提供公平、流畅的游戏体验。

Netcode 还在通过安全处理数据来维护游戏完整性方面发挥着至关重要 class 的作用。

为您的游戏选择合适的 Netcode

选择合适的 netcode 是游戏开发中的关键决策。这一选择在很大程度上取决于您的游戏类型、游戏机制以及预期的玩家群体。

  1. 客户端-服务器模型 vs. 点对点 (P2P):P2P 通常用于规模较小、对延迟较不敏感且通常非竞争性的游戏。它直接连接玩家,减少了对中央服务器的需求。相比之下,客户端-服务器模型(玩家连接到中央服务器)更适合需要第三方服务器权威来执行游戏规则和安全性的较大型、竞争性游戏。然而,尤其是 P2P 会引入游戏开发者在选择其作为架构时需要注意的安全隐患。

  2. 考虑游戏类型:像射击游戏这样快节奏的游戏需要更强大的 netcode 来处理快速的玩家动作并确保所有客户端保持同步,而策略游戏则可以更宽容,并利用预测技术来启用具有更高延迟的会话。

  3. 可扩展性:预测您游戏的增长。一个可扩展的 netcode 可以处理不断增加的玩家数量,而不会妥协性能或让您的托管提供商账单飙升。

  4. 安全与公平竞赛:确保您的 netcode 能够阻止常见的作弊和黑客行为,以维护公平的游戏环境。

构建多人游戏:首次使用 Netcode 的体验

对于初学者,Unity 提供了一个用户友好的平台来实施 netcode,称为 Netcode for GameObjects。让我们分解基本步骤:

  1. 理解 Unity 的 Netcode:Unity 提供了一套强大的网络工具。熟悉 Unity 的网络组件,例如 NetworkManager 和 NetworkIdentity。

  2. 设置基本网络:从创建一个简单的客户端-服务器设置开始。Unity 的教程和文档是初始步骤的极佳资源。

  3. 同步 GameObject:学习跨不同客户端同步游戏对象。这包括玩家角色和游戏世界中的交互元素。

  4. 处理玩家输入:确保玩家输入在所有客户端之间得到有效沟通和反映。

  5. 测试:定期在各种网络条件下测试您的 netcode,以确保可靠性和性能。

更进一步:更好的 Netcode 替代方案

Unity for GameObjects 被广泛证实存在硬性限制。具体而言,三个社区制作的 netcode 解决方案脱颖而出,每一个都为游戏开发者带来了有意义的改进。其中两个是长期存在的开源项目:拥有 10 年历史的资深项目 Mirror Networking 和 Fish-Net Networking。第三个是 PurrNet,它作为一个较新的参与者,因其对开发者友好的设计而受到关注。

Mirror Networking

Mirror 是 Unity 历史最悠久的开源网络库,源自 Unity 原生附带、现已弃用的 UNET。它运行在具有服务器权威的客户端-服务器拓扑上,这意味着服务器是游戏状态的唯一事实来源——这是任何需要有效反作弊保护的游戏的前提条件。

Mirror 是经过 OSI 认证的开源软件,拥有广泛的文档和庞大的社区。它开箱即用支持延迟补偿(对于射击游戏中的命中判定非常有用)、感兴趣区域(用于控制哪些客户端接收关于哪些对象的更新)、Steam 和 Epic 传输层、用于 WebGL 构建的 WebSocket 支持,以及多路复用传输(Multiplex Transport),使单个服务器可以同时接受使用不同传输层的客户端。

在您决定使用前,有几点需要了解。Mirror 采用单例 API 设计,这意味着每个可执行文件只能运行一个网络核心实例。这对于大多数游戏来说没有问题,但限制了某些高级架构。此外,它没有正式的长期支持(LTS)轨道:API 在历史上的变化速度可能需要您在版本之间更新代码。对于处于活跃开发阶段的游戏,这意味着需要密切关注变更日志。

使用 Mirror Networking 的知名游戏包括《Population: ONE》、《*Zoomba*》(在 Google Play 上拥有 1 亿次下载)以及由前魔兽世界开发者制作的《*Unleashed*》。

PurrNet

PurrNet 是一个免费、开源的 Unity 网络库,由一些认为现有解决方案违背了 Unity 自然工作流程而非拥抱它的开发者构建。其核心理念非常直接:如果您已经知道如何使用 Unity 和 C#,您就应该能够构建多人游戏,而无需学习完全不同的工作方式。

有几个特点脱颖而出。首先,生成 (spawning) 和销毁 (despawning) 的工作方式与 Unity 完全相同。您调用 Instantiate() 和 Destroy(),PurrNet 就会处理网络部分。无需特殊的生成调用,无需额外步骤。其次,权限是通过单个 Network Rules 脚本化对象控制的,而不是固化在您的游戏代码中,这意味着您可以在原型设计时使用完全的客户端权限,以后再锁定为服务器权限,而无需重写任何内容。第三,没有烘焙步骤。场景 ID 是在运行时根据层级顺序计算的,这消除了一整类版本控制冲突以及其他解决方案中开发者经常遇到的神秘构建问题。

在 RPC 方面,PurrNet 支持泛型、静态和可等待的 (awaitable) RPC。可等待的 RPC 允许您在服务器上调用方法并直接等待返回值,类似于常规 C# 中 async/await 的工作方式。它还附带一个持久化玩家数据系统(其 "cookie" 系统),允许服务器在没有任何自定义代码的情况下将重新连接的玩家识别为同一个人。

PurrNet 是 100% 免费的,没有付费层。没有收入分成,没有前期成本,也没有核心功能被锁定在付费墙后。

Edgegap 针对 PurrNet 提供了完整的集成教程,引导您将 Unity 项目连接到专用游戏服务器:

Fish Networking ("Fish-Net")

Fish-Net Networking 是一项专为在线多人游戏设计的网络技术,强调适应性和可扩展性。它已成为那些希望社区维护工具能够跟上更苛刻游戏类型步伐的开发者的首选推荐。

在 Mirror 保持简单明了的同时,Fish-Net 声称它走得更远。它附带了针对变换(transforms)和刚体(rigidbodies)的客户端预测——这种功能在构建需要即时动作反馈且服务器保持权威的快节奏竞争性游戏时非常重要。延迟补偿(作为付费功能提供)可用于实现精准的命中判定,无论玩家延迟如何。对于更大的游戏世界,感兴趣区域(Area of Interest)支持允许您精确控制哪些客户端接收关于哪些对象的更新,从而控制带宽。

Fish-Net 还拥有正式的长期支持(LTS)轨道和 API 更新的稳定性保证,这意味着您可以升级版本而无需担心现有代码损坏。它采用实例化的 API 设计而非单例,这允许单个可执行文件充当多个服务器或同时连接到多个服务器。这对于更高级的架构非常重要。

其他一些实用细节:Fish-Net 支持无分配传输,以便在大规模时获得更好的垃圾回收性能;支持堆叠和附加场景(适用于单个服务器上的实例化副本或独立游戏房间);并且开箱即用支持 Unity Transport 和 Photon Transport,同时支持 Steam 和 Epic。

Fish-Net Networking 的优势包括增强的可扩展性、减轻服务器负载,以及在处理玩家数量波动时具有更高的鲁棒性。

使用 Fish-Net Networking 的游戏包括《*Arcadius*》、《*Fight Action Sandbox*》、《*Reign of Dwarf*》、《*Cat Warfare*》、《*Skygard Arena*》等,还有更多游戏处于发布和制作阶段。

Netcode 最佳实践

  1. 针对延迟进行优化:实施延迟补偿和预测等技术,以应对延迟问题。

  2. 安全措施:定期更新您的 netcode,以防御新的漏洞和作弊手段。攻击者喜欢针对最流行的库,因为它们暴露了最多的用户。

  3. 可扩展架构:将您的 netcode 设计为可扩展的,以平稳容纳不断增加的玩家。尽量减少需要同步的对象和属性的数量,并考虑您的游戏设计所允许的最坏情况。

  4. 反馈循环:建立反馈机制以监控性能和玩家体验,从而实现持续改进。

  5. 经常测试:以易于在对游戏进行任何重大更改时重新运行的方式实施端到端测试和压力测试,这样您就能确信下一次更新不会给您带来差评。

结论

掌握 netcode 是一段充满挑战和学习机会的旅程。

通过选择合适的 netcode、理解 Unity 的工具、遵循最佳实践以及利用可用资源,您可以创建引人入胜且流畅的多人游戏体验。

在选择 netcode 之后,让游戏上线的下一步将是决定托管服务。幸运的是,Edgegap 已在包括 Mirror、Fish-Net 和 PurrNet 在内的流行插件中进行了集成。观看上面的视频,或前往它们各自的文档了解更多信息。

--

*Mirror 和 Fish-Net 的功能对比数据部分源自一个由社区维护的 **Unity 联网解决方案电子表格**(该表格最后审查于 2025 年 4 月,目前已不再积极维护)。*

书写者

Vincent Archambault,Edgegap 的首席科学官

Get your Game Online Easily & in Minutes

立即开始集成!

轻松在线游戏
且在几分钟内

Get your Game Online Easily & in Minutes