Unity网络框架对比 Mirror|FishNet|NGO

news2024/12/25 9:30:22

在Unity中制作非单机项目常用的免费网络框架,这里选取了三款比较火的网络框架,Mirror、FishNet和Netcode for GameObject(NGO)。

比较了最常用的免费网络解决方案。可能还有值得探索的付费选项。您需要对此进行自己的研究。数据表格更新日志截止到: 2024/09/12

Mirror:点击跳转

FishNet:点击跳转

NGO:点击跳转 

类别特征MirrorFishNetNGO描述
GeneralTopologyClient-ServerClient-ServerClient-Server支持的的模式
GeneralOpen Source InitiativeOSIOtherOSI软件许可证已获得开放源代码促进会的批准。某些功能可能需要付费服务,甚至需要付费服务。
GeneralSource AvailableYYY源代码可公开免费获取。
GeneralLong-Term SupportNYN长期支持通过从新版本中修复错误并将其包含到旧 LTS 版本中来确保框架的稳定性。
GeneralRoadmapYYY路线图有助于了解计划中的功能变更,有时还会附带预计到达时间 (ETA)
GeneralUpdate StabilityNYN允许安全地应用更新,而无需由于网络解决方案内的变化而重构代码。
GeneralAPI DesignSingletonInstancedSingleton实例化 API 可让单个可执行文件充当多个服务器,或让客户端同时连接到多个服务器。单例 API 仅允许每个可执行文件运行一个解决方案核心实例。
GeneralDedicated ServerYYY是否可以进行专用服务器构建,通过将构建目标设置为专用服务器Unity 中的内置平台目标)。
GeneralAuthorityServerServerServer客户端或服务器是否对游戏具有权限。反作弊需要服务器权限。拥有服务器权限并不一定意味着框架不支持客户端权限。
GeneralListen Server (Host)YYY是否任何人都可以在玩游戏时为其他人主持游戏。主持玩家具有延迟优势,并且更容易作弊。不建议在真正的竞技游戏中主持,但适合与朋友一起玩或合作游戏。
ConnectionConnection ApprovalYYY服务器可以选择在允许连接继续之前验证连接尝试。
ConnectionAllocation Free TransportsNYY拥有免费分配的传输可以确保更少的垃圾收集和显著更好的扩展。
ConnectionWebSocket TransportYYY允许 WebGL 构建作为客户端连接,但由于 WebSockets 而存在额外的延迟。注意:由于平台的技术限制,WebGL 构建通常不能作为服务器或主机。
ConnectionSteam TransportYYY允许通过 Steam 网络玩游戏。
ConnectionUnity TransportNYY允许通过 Unity 传输和服务玩游戏。
ConnectionEpic TransportYYY允许通过 Epic 在线服务网络玩游戏。
ConnectionOculus TransportNNN支持使用 Mata 网络服务。
ConnectionPhoton TransportNYY支持使用 Photon 网络服务。
ConnectionOffline Transport (Single Player)NY (Paid)N允许离线玩游戏,无需互联网连接。
ConnectionMultiplex TransportYYY允许服务器处理来自不同传输或平台类型的客户端连接。
MessagingRuntime RPC SettingsNYN允许在运行时通过代码更改 RPC 的使用或设置,例如:可靠变为不可靠,TargetRpc 变为 ObserversRpc
MessagingReliable RPCsYYYRPC 将按照发送的顺序接收和运行。
MessagingUnreliable RPCsYYY发送的 RPC 不可靠,可能永远不会到达,或者无序到达。
MessagingBroadcast RPCsLYY多个对象脚本可以实现并运行广播 RPC 方法,而不仅仅是发送 RPC 的脚本。
MessagingLocal RPCsNYN除了远程执行外,RPC 还可以在本地执行。
MessagingBuffered RPCsNYNRPC 可以自动获取自新加入的客户端以来的最新值。
MessagingClient-to-Client RPCsNNY允许通过一次方法调用在客户端之间发送 RPC。注意:这仍然可以通过发送 ServerRpc 来实现,然后 ServerRpc 会中继到一个或多个客户端;如果该过程不是由框架自动执行的,则不被视为开箱即用的支持。
MessagingLarge PacketsNYN允许发送超出传输缓冲区大小的数据包而不会出现错误或丢失连接。这可确保所有传输类型均具有相同的传输体验。
MessagingData BatchingYYY将数据合并成尽可能少的数据包,以实现更高效的网络和更好的性能。
SynchronizationValue-Type VariablesYYY同步值类型。
SynchronizationNullable-Type VariablesLYN同步可空类型。
SynchronizationCustom type serializationYYY允许开发人员控制使用类型序列化的数据。
SynchronizationAutomatic type serializationYYN网络解决方案可以自动为非标准类型(例如自定义类)创建序列化器。
SynchronizationCustom Collections / TypesYYY允许创建作为序列化逻辑容器的自定义类型。
SynchronizationFieldsYYY允许单个变量类型同步。
SynchronizationTimersNYN允许有效地同步和管理服务器和客户端之间的倒计时器。
SynchronizationList CollectionYYY允许有效地同步列表集合。
SynchronizationDictionary CollectionYYN允许有效地同步字典集合。
SynchronizationSet CollectionYYN允许有效地同步集合,例如 HashSet
GameObjectsPlayer Prefab SpawningYYY生成用于连接客户端的玩家预制件。
GameObjectsAuto Prefab DetectionNYN避免必须手动管理可以作为网络对象生成的预制件列表。
GameObjectsObject PoolingLYL允许从对象池中生成网络对象,这通常会导致更快的生成和更少的垃圾分配。
GameObjectsAutomatic Object PoolingNYN允许池化任何类型的网络对象,而无需编写自定义池化代码。
GameObjectsOffline Networked ObjectsNYN允许联网对象实例化而无需通过网络同步。这对于将同一预制件用于多种用途非常有用;例如可能需要或不需要联网的射弹基座。
GameObjectsNested Network BehavioursYYY允许 NetworkBehaviour 脚本存在于网络对象的子对象上。
GameObjectsNested Network PrefabsNYN允许联网对象(和预制件)存在于联网对象的子对象上。
GameObjectsParent SpawningNYN允许网络对象在其他网络对象下生成。
GameObjectsPredicted SpawningNYN允许客户端生成或取消生成网络对象,而无需等待服务器完成操作。
GameObjectsPredicted OwnerNYN允许客户端无需等待服务器完成更改即可取得对象的所有权。这样,客户端就可以立即使用需要所有权的对象,而不受延迟影响。
GameObjectsRuntime Parent SynchronizationNYN在运行时同步父级变化,例如将玩家设置为移动平台的子级。
GameObjectsSynchronize Client ObjectsNYN允许客户端知道哪个客户端拥有某个对象,以及任何客户端拥有的所有对象。
GameObjectsSynchronize TransformYYY允许转换值通过网络同步。某些网络解决方案可能比其他解决方案占用更少的带宽。
GameObjectsTransform InterpolationYYY允许变换属性随着时间的推移朝着目标值进行线性插值,从而实现平滑移动。
GameObjectsTransform ExtrapolationNY (Paid)N允许将变换线性外推至假定的未来值。这对于隐藏不规则延迟或数据包丢失非常有用。
GameObjectsServer Authoritative TransformYYY允许仅由服务器控制变换。根据客户端的延迟,移动会有延迟。这与客户端预测不同。
GameObjectsClient Authoritative TransformYYY允许客户端控制变换。没有延迟,但客户端可以轻松欺骗其移动。这与客户端预测不同。
GameObjectsTransform PredictionNYN允许轻松实现客户端对变换的预测。此功能对于必须防止作弊的快节奏游戏至关重要。这与刚体预测不同。
GameObjectsRigidBody PredictionNYN允许轻松实现刚体上的滑动侧预测。这还允许实时准确地与联网刚体进行交互;就像 Rocket League 一样。
GameObjectsAnimator SynchronizationYYY允许 Animator 状态通过网络同步。
GameObjectsAnimator InterpolationNYN允许动画线性插入到最新值以确保平滑的混合树。
GameObjectsServer Authoritative AnimationYYY允许动画仅由服务器控制。这将导致动画因延迟而延迟。
GameObjectsClient Authoritative AnimationYYY允许客户端控制动画。这还允许立即更改客户端动画,并且还具有作弊能力。
ScenesScene Network ObjectsYYY允许在编辑时将联网对象放置在场景中。
ScenesAdditive ScenesNYN允许附加地加载多个场景。
ScenesStacked Scenes (instances)NYN允许在服务器上多次加载同一场景,在客户端上仅加载一次。单个服务器上实例化地下城的要求,意味着:并非所有客户端都需要位于同一场景中。
ScenesOnline/Offline ScenesYYN根据客户端或服务器的本地连接状态,自动在单个离线或在线场景之间切换。
ScenesScene HotloadingNYN允许根据需要加载和卸载服务器和客户端上的场景。
MiscellaneousTiming ArchitectureVariable RateTick or VariableTick客户端和服务器之间如何同步时间、状态或数据。
Area of InterestNetwork Level of DetailNYN限制向玩家发送物体距离数据的频率,以减少服务器使用的带宽。
Area of InterestArea of InterestYYL通过条件控制哪些客户端可以看到哪些联网对象。
Area of InterestGlobal ConditionsYYN允许各种管理员确定所有联网对象的状况。
Area of InterestIndividual ConditionsNYN允许某些联网对象或预制件覆盖全局条件,或在其自身条件之外使用。
Area of InterestStacked ConditionsNYN允许同时使用多个条件。例如:联网对象必须位于特定场景中,并且玩家必须在该对象 10 个单位范围内才能看到该对象。
Area of InterestIncluded ConditionsYYN网络解决方案附带多种条件可供选择。
Area of InterestCustom ConditionsYYL可以用最少的努力制定和实施自定义条件。
UtilityLag CompensationYY (Paid)N允许对撞机及时回滚,以实现准确的命中登记,而不管延迟如何。
UtilityHost migrationNNN注意:所有解决方案都应该可以进行自定义实现,但可能需要保持游戏状态,然后重新启动会话。
UtilityAddressables SupportNYY允许通过网络使用可寻址场景和对象。
UtilityCode StrippingNY (Paid)N从客户端版本中删除服务器代码,并从服务器版本中删除客户端代码。这有助于提高服务器安全性。
UtilityServer Discovery (LAN)YYY允许同一局域网内的设备一起玩。
UtilityNetwork ProfilerY (Paid)LY显示每个网络功能使用的带宽的详细信息。
UtilityLatency SimulatorYYY允许模拟服务器和客户端的延迟、数据包丢失等。
UtilityInstance Dependency InjectionNYN允许组件在网络解决方案中注册。这允许自定义系统或管理器与服务器或客户端实例关联。

 主观分析

1. Mirror

优点:
  • 易用性: Mirror 是 Unity 中非常流行的网络框架,它的接口和设计理念与旧版的 UNet 非常相似,因此很多 Unity 开发者容易上手。
  • 活跃的社区: Mirror 拥有一个非常活跃的开发者社区,很多问题都可以在论坛或文档中找到解决方案。
  • 文档完善: 提供了详细的文档和示例,适合新手入门。
  • 性能好: 在小型到中型项目中,Mirror 的性能表现不错,支持可靠的网络通信。
  • 开源: Mirror 是开源的,可以根据需要进行自定义修改。
缺点:
  • 扩展性差: 尽管 Mirror 适合快速开发,但对于大型复杂的网络架构,可能会遇到扩展性的问题,特别是当你需要一些非常定制化的功能时。
  • 不再官方支持: 虽然 Mirror 很流行,但它并不是 Unity 官方的解决方案,未来 Unity 会优先支持 Netcode for GameObject,这意味着 Mirror 可能会逐步被替代。
学习难易度:
  • 中等: 由于其与 UNet 类似,熟悉 UNet 的开发者会觉得非常容易上手。对于初学者来说,Mirror 提供了简单易懂的示例代码,但需要一定的网络基础。

2. FishNet

优点:
  • 性能优化: FishNet 在性能优化方面有一些独特的实现,特别是在高并发和大规模多人游戏中表现非常好。
  • 高级功能: FishNet 提供了很多高级功能,如网络物体同步、分布式负载、客户端和服务器之间的数据压缩等。
  • 灵活性: 比 Mirror 更加灵活,允许更深层次的自定义,适合对网络框架有更高要求的开发者。
  • 现代设计: FishNet 是从头开始设计的,支持更高效的同步机制和架构,适合想要利用最新技术的开发者。
缺点:
  • 文档不足: 相比 Mirror,FishNet 的文档和社区资源较少,这可能会增加学习的难度。
  • 复杂性: 由于它包含了很多高级功能和配置选项,学习曲线相对较陡,特别是对于没有网络开发经验的开发者来说。
  • 不如 Mirror 稳定: 在一些小型项目中可能不如 Mirror 稳定,且对某些网络情况的适应性较差。
学习难易度:
  • 较难: FishNet 提供了很多灵活的配置和功能,但也因此增加了学习难度。如果没有较强的网络编程基础,可能需要一定的时间来熟悉它的使用。

3. Netcode for GameObject (NGO)

优点:
  • Unity 官方支持: Netcode for GameObject 是 Unity 官方推荐的网络框架,长期来看它是最有可能持续更新和发展的框架。
  • 与 Unity 紧密集成: 作为 Unity 官方的解决方案,它与 Unity 引擎紧密集成,未来的版本更新可能会提供更多的原生支持,减少兼容性问题。
  • 现代化设计: 相比 UNet,NGO 引入了现代化的网络通信机制,支持高效的数据同步和可靠的网络连接。
  • 文档和示例: Unity 官方为 NGO 提供了详尽的文档和教程,易于学习。
缺点:
  • 功能相对基础: 相比 Mirror 和 FishNet,NGO 的一些功能还不够全面,特别是在自定义和高性能需求方面可能不如其他两个框架。
  • 学习曲线: 由于 Unity 官方希望提供一个易于理解的框架,NGO 的学习曲线相对较低,但对于有特定需求的开发者,可能会感到功能不够灵活。
  • 当前的生态较小: 虽然是官方框架,但相对于 Mirror 的用户群体和社区支持,NGO 目前的生态还在逐步发展中。

综合对比和长远推荐:

优先推荐:
  • 长期发展角度: Netcode for GameObject (NGO) 作为 Unity 官方的网络框架,具有最强的长期发展潜力。它会随着 Unity 引擎的演进不断更新,并且官方会优先支持。考虑到 Unity 对 NGO 的投入,以及与 Unity 引擎的深度集成,学习 NGO 无疑是一个稳妥的选择,尤其是对于未来的项目。
适合中小型项目或快速开发:
  • Mirror 依然是一个非常好的选择,尤其是对于需要快速开发和原型制作的项目。它已经非常成熟,并且有庞大的社区和文档支持。如果项目需要快速上线,且没有太复杂的网络需求,Mirror 仍然是不错的选择。
适合大规模、高性能需求的项目:
  • FishNet 是适合那些对性能有更高要求,且能够投入时间去学习的开发者。如果你的项目需要处理大量的玩家、复杂的物体同步,或者你希望最大化利用最新的网络架构技术,FishNet 是一个值得深入了解的框架。

这些选择并非绝对,最终的决定取决于你的项目需求、团队技能以及未来的维护和扩展计划。

以上观点仅限个人,如有不同,还请评论区探讨。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】深度剖析 scanf 函数:原理、应用与优化

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯scanf 函数的基本原理💯基本用法示例常见占位符示例 💯使用 scanf 时的注意事项💯引入 cstdio 头文件💯scanf 与 cin 的对比…

YOLOv1 (You Only Look Once)

YOLO (You Only Look Once) 是一种经典的目标检测算法,旨在通过一个统一的卷积神经网络(CNN)进行目标检测,最大化检测速度并保持较高的精度。YOLO 在目标检测领域产生了巨大的影响,并且经过了多个版本的迭代。下面是 Y…

【Verilog】实验二 数据选择器的设计与vivado集成开发环境

目录 一、实验目的 二、实验环境 三、实验任务 四、实验原理 五、实验步骤 top.v mux2_1.v 一、实验目的 1. 掌握数据选择器的工作原理和逻辑功能。 2. 熟悉vivado集成开发环境。 3. 熟悉vivado中进行开发设计的流程。 二、实验环境 1. 装有vivado的计算机。 2. Sw…

【CSS in Depth 2 精译_063】10.2 深入理解 CSS 容器查询中的容器

当前内容所在位置(可进入专栏查看其他译好的章节内容) 【第十章 CSS 容器查询】 ✔️ 10.1 容器查询的一个简单示例 10.1.1 容器尺寸查询的用法 10.2 深入理解容器 ✔️ 10.2.1 容器的类型 ✔️10.2.2 容器的名称 ✔️10.2.3 容器与模块化 CSS ✔️ 10.3…

今天我们来聊聊Maven中两个高级的概念—— 插件和目标

插件&#xff08;plugin&#xff09; Maven的核心是一个插件执行框架;所有的工作都是由插件完成的。 Maven中Plugin分为两种类型&#xff1a; build类型Plugin只能在build阶段执行&#xff0c;在POM中需要在 <build/> 标签下进行配置。 reporting类型&#xff1a;在si…

【触想智能】自动售票机选择工控一体机配套的原因分析

自动售票机是现代公共交通系统中常见的设备之一&#xff0c;它能够方便、快速地为乘客提供票务服务。为了实现高效、可靠的运营&#xff0c;许多自动售票机都采用工控一体机作为核心控制硬件。 触想工控一体机TPC-W200系列 下面&#xff0c;触想智能小编为大家分析为什么自动售…

[计算机网络] HTTP/HTTPS

一. HTTP/HTTPS简介 1.1 HTTP HTTP&#xff08;超文本传输协议&#xff0c;Hypertext Transfer Protocol&#xff09;是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 工作在 TCP/IP 模型之上&#xff0c;通常使用端口 …

element-ui的下拉框报错:Cannot read properties of null (reading ‘disabled‘)

在使用element下拉框时&#xff0c;下拉框option必须点击输入框才关闭&#xff0c;点击其他地方报错&#xff1a;Cannot read properties of null (reading disabled) 造成报错原因&#xff1a;项目中使用了el-dropdown组件&#xff0c;但是在el-dropdown里面没有定义el-dropdo…

新一代零样本无训练目标检测

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月2日21点02分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅h…

30.100ASK_T113-PRO 用QT编写视频播放器(一)

1.再buildroot中添加视频解码库 X264, 执行 make menuconfig Target packages -->Libraries --> Multimedia --> X264 CLI 还需要添加 FFmpeg 2. 保存,重新编译 make all 3.将镜像下载开发板

Python办公自动化,批量生成Excel案例数据集

在数据分析的世界里&#xff0c;数据是核心&#xff0c;而如何高效地生成和处理数据则成为每位数据分析师必备的技能之一。今天&#xff0c;我们要探讨一个有趣的话题——“造数”。 但这里的“造数”并非意味着编造数据&#xff0c;而是指在确保数据安全的前提下&#xff0c;…

在线绘制Nature Communication同款双色、四色火山图,突出感兴趣的基因

导读&#xff1a;火山图通常使用三种颜色分别表示显著上调&#xff0c;显著下调和不显著。通过为特定的数据点添加另一种颜色&#xff0c;可以创建双色或四色火山图&#xff0c;从而更直观地突出感兴趣的数据点。 《Nature Communication》文章“Molecular and functional land…

【大语言模型】ACL2024论文-23 检索增强的多语言知识编辑

【大语言模型】ACL2024论文-23 检索增强的多语言知识编辑 目录 文章目录 【大语言模型】ACL2024论文-23 检索增强的多语言知识编辑目录摘要研究背景问题与挑战如何解决核心创新点算法模型实验效果&#xff08;包含重要数据与结论&#xff09;相关工作后续优化方向 后记 检索增强…

ETSI EN 300328 标准的一些笔记

ETSI - European Telecommunications Standards Institute 欧洲电信标准化协会 ETSI EN 300328 是欧洲协调标准&#xff0c;此标准适用于工作在2.4G频段范围内运行的宽频传输系统和设备的无线电频谱。 例如 WIFI、Zigbee、蓝牙、 (国内的星闪)。不涵盖UWB。 符合了EN 300328标…

VSCode:代码格式化插件

settings.json文件中添加如下配置并保存 {"workbench.sideBar.location": "left","cssrem.rootFontSize": 80,"git.ignoreWindowsGit27Warning": true,"eslint.codeAction.showDocumentation": {"enable": true…

Redis实现限量优惠券的秒杀

核心&#xff1a;避免超卖问题&#xff0c;保证一人一单 业务逻辑 代码步骤分析 全部代码 Service public class VoucherOrderServiceImpl extends ServiceImpl<VoucherOrderMapper, VoucherOrder> implements IVoucherOrderService {Resourceprivate ISeckillVoucher…

Github提交Pull Request教程 Git基础扫盲(零基础易懂)

1 PR是什么&#xff1f; PR&#xff0c;全称Pull Request&#xff08;拉取请求&#xff09;&#xff0c;是一种非常重要的协作机制&#xff0c;它是 Git 和 GitHub 等代码托管平台中常见的功能&#xff0c;被广泛用于参与社区贡献&#xff0c;从而促进项目的发展。 PR的整个过…

大数据技术Kafka详解 ② | Kafka基础与架构介绍

目录 1、kafka的基本介绍 2、kafka的好处 3、分布式发布与订阅系统 4、kafka的主要应用场景 4.1、指标分析 4.2、日志聚合解决方法 4.3、流式处理 5、kafka架构 6、kafka主要组件 6.1、producer(生产者) 6.2、topic(主题) 6.3、partition(分区) 6.4、consumer(消费…

Docker中配置Mysql主从备份

Mysql配置主从备份 一、Docker中实现跨服务器主从备份二、配置步骤1.配置主库2.配置从库3.遇到问题3.其它使用到的命令 一、Docker中实现跨服务器主从备份 在 Docker 中配置 MySQL 主从备份主要通过 MySQL 主从复制实现 二、配置步骤 1.配置主库 # 进入mysql主库容器 docke…

组态王实现设备OEE数据采集的项目总结

组态王实现设备OEE数据采集的项目总结 方案设计硬件设计软件设计 难点总结数据通讯数据转换报表数据存储 项目拓展 最近在做一个项目&#xff0c;关于采集设备OEE数据。陆陆续续做了小半个月&#xff0c;现在算告一段落&#xff0c;特整理总结。 方案设计 硬件设计 本项目是…