

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

游戏开发是复杂的,其组件往往繁多且复杂,难以理解和命名。在本指南中,我们旨在为初学者和独立开发者揭开游戏服务、工具和技术复杂性的神秘面纱。
首先从对多人游戏至关重要的:网络代码 (netcode) 开始。
理解网络代码对于创建引人入胜且无缝的多人体验至关重要。让我们来了解它是什么,为什么它很重要,以及当今 Unity 中最简单且最有效的网络代码实现方案。
什么是网络代码 (Netcode)?
网络代码是一个囊括了视频游戏网络层面的术语,尤其是在多人游戏环境中。它是负责在玩家设备与游戏服务器之间交换数据的技术,这被称为“同步”,它确保了一位玩家执行的操作能够立即且精确地反映在另一位玩家的游戏环境中。
由于全球玩家面临着不同的延迟和连接质量,这种同步极具挑战性。有效的网络代码能够兼顾过时或不佳的玩家设备配置,力求提供公平、流畅的游戏体验。
网络代码通过安全地处理数据,在维护游戏完整性方面也发挥着至关重要 lunar 的作用。
为您的游戏选择合适的网络代码
选择合适的网络代码是游戏开发中的一项关键决策。这一选择在很大程度上取决于您的游戏类型、游戏机制以及预期的玩家群体。
客户端-服务器模型 vs. 点对点 (P2P): P2P 通常用于规模较小、对延迟较不敏感且通常是非竞争性的游戏。它将玩家直接连接起来,减少了对中央服务器的需求。相反,客户端-服务器模型(玩家连接到中央服务器)更适合需要第三方服务器权威来维护游戏规则和安全的大型竞争性游戏。然而,尤其是 P2P 会引入游戏开发者在选择其作为架构时需要注意的安全问题。
考虑游戏类型: 射击游戏等快节奏游戏需要更强大的网络代码来处理快速的玩家操作并确保所有客户端保持同步,而策略游戏则可以更具宽容度,并利用预测技术来支持高延迟的会话。
可扩展性: 预估您游戏的发展。一个可扩展的网络代码可以处理不断增加的玩家数量,而不会影响性能或增加托管服务商的巨额账单。
安全与公平竞技: 确保您的网络代码可以阻止常见的作弊和黑客行为,以维护公平的竞技环境。
构建多人游戏:首次尝试使用网络代码
对于初学者,Unity 提供了一个用户友好的平台来实现名为 Netcode for GameObjects 的网络代码。让我们拆解一下基本步骤:
理解 Unity 的网络代码: Unity 提供了强大的网络工具集。请熟悉 Unity 的网络组件,例如 NetworkManager 和 NetworkIdentity。
搭建基本网络: 从创建简单的客户端-服务器架构开始。Unity 的教程和文档是初始步骤的绝佳资源。
同步游戏对象: 学习跨不同客户端同步游戏对象。这包括游戏世界中的玩家角色和互动元素。
处理玩家输入: 确保玩家输入在所有客户端之间得到有效的传递和反映。
测试: 定期在各种网络条件下测试您的网络代码,以确保可靠性和性能。
进阶:更好的网络代码替代方案
Unity for GameObjects 被公认存在严格的局限性。具体而言,有三种社区制作的网络代码解决方案脱颖而出,每一种都为游戏开发者带来了有意义的改进。其中两个是长期存在的开源项目:拥有 10 年历史的成熟项目 Mirror Networking 和 Fish-Net Networking。第三个是 PurrNet,它作为新晋者,因其对开发者友好的设计而正受到关注。
Mirror Networking
Mirror 是 Unity 历史最悠久的开源网络库,源自 Unity 曾原生自带但现已废弃的 UNET。它运行在具有服务器权威的客户端-服务器拓扑上,这意味着服务器是游戏状态的唯一事实来源——这是任何需要有效防作弊保护的游戏的前提条件。
Mirror 获得了 OSI 认证开源,文档广泛,并拥有一个庞大的社区。它支持延迟补偿(可用于射击游戏中的命中判定)、感兴趣区域(用于控制哪些客户端接收哪些对象的更新)、Steam 和 Epic 传输协议、对 WebGL 构建的 WebSocket 支持,以及多路复用传输,以便单个服务器可以同时接受使用不同传输协议的客户端。
在确定使用前,有几点需要了解。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 可脚本化对象 (ScriptableObject) 控制,而不是硬编码在您的游戏代码中,这意味着您可以在完整客户端权限下进行原型设计,随后再锁定为服务器权限,而无需重写任何代码。第三,没有烘焙步骤。场景 ID 是在运行时根据层级顺序计算的,这消除了一整类版本控制冲突和神秘的构建问题,而使用其他解决方案的开发者经常会遇到这些问题。
在 RPC 方面,PurrNet 支持泛型、静态和可等待 (awaitable) 的 RPC。可等待的 RPC 允许您在服务器上调用方法并直接等待返回值,类似于 regular 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 支持无分配 (allocation-free) 传输,以便在大规模时获得更好的垃圾回收性能;支持堆叠和叠加场景(适用于在单个服务器上实例化副本或独立的游戏房间);并且开箱即用地支持 Unity Transport 和 Photon Transport,以及 Steam 和 Epic 传输协议。
Fish-Net Networking 的优势包括增强的可扩展性、减轻服务器负载以及在处理玩家数量波动时更高的稳定性。
使用 Fish-Net Networking 的游戏包括《Arcadius》、《Fight Action Sandbox》、《Reign of Dwarf》、《Cat Warfare》、《Skygard Arena》以及许多处于发布和制作阶段的其他游戏。
网络代码最佳实践
针对延迟进行优化: 采用延迟补偿和预测等技术来对抗延迟问题。
安全措施: 定期更新您的网络代码,以防范新的漏洞和作弊手段。攻击者喜欢针对最受欢迎的网络库,因为它们接触的用户最多。
可扩展架构: 将您的网络代码设计为可扩展的,从而能够平稳地接纳不断增加的玩家。尽量减少需要同步的对象和属性数量,并考虑您的游戏设计所允许的最坏情况。
反馈循环: 实施反馈机制以监控游戏性能和玩家体验,从而实现持续改进。
经常测试: 以易于重新运行的方式来实施端到端测试和压力测试,每当您对游戏进行重大更改时,都能轻松运行,这样您就能确信,您的下一次更新不会带来差评。
总结
掌握网络代码是一段充满挑战和学习机会的旅程。
通过选择合适的网络代码、理解 Unity 的工具、遵循最佳实践并利用现有资源,您可以打造出引人入胜且流畅的多人游戏体验。
在选择完网络代码后,让游戏上线的下一步将是决定托管服务。幸运的是,Edgegap 已在包括 Mirror、Fish-Net 和 PurrNet 在内的流行插件中进行了集成。您可以观看上方的视频,或前往它们各自的文档查看。
--
Mirror 和 Fish-Net 的功能对比数据部分源自社区维护的 Unity 网络解决方案电子表格(该电子表格最后审查于 2025 年 4 月,目前已不再积极维护)。
书写者
Vincent Archambault,Edgegap 的首席科学官











