关于联网方案

  • Listen Server (Host) 和 Relay转发服务器游戏包同时包含客户端和服务端逻辑,联网时一个客户端开主,称为Host,其他客户端连入。局域网和互联网都支持。互联网需要有一个匹配服务器帮助找到不同人建立的主机。如果不使用Relay服务器,那对于互联网连接就要使用NAT穿透下的P2P,但是P2P的成功率是80%90%,所以还是需要转发服务器来处理剩下的10%20%的用户。Host模式下由于Host机是某一个客户的机子,性能不可控,如果Host机性能差则联网体验差。另外Host模式要处理Host掉线的问题。Host模式安全性也比较差,黑客可以使用一个破解修改后的客户端开主,从而作弊。好处是不需要独立的游戏服务器,除了匹配服和转发服之外没有什么开销。
  • Delicated Game Server(DGS)即服务端单独编译成一个包运行。需要独立的服务器去运行服务端,需要考虑扩容。好处是服务端机器性能可控,且可在全球部署多个服务器点位,给玩家分配最优的服务器。DGS模式可以将游戏逻辑或者校验逻辑写在服务端,安全性较高。

UNet

UNet是早期的方案,也被称为HLAPI (High Level API),提供了一系列高层组件进行快速的联网开发。网络拓扑方案使用了Listen Server模式同时支持Relay(转发),也支持DGS(专用游戏服务器)。UNet现在已经被官方废弃了,在Unity2020下面还可以通过安装HLAPI的包继续使用,但Unity2021已经找不到这包了。

MLAPI / Netcode (for GameObjects)

即Middle Level API,是一个开源项目,被Unity采用。现在Unity已经升级为Netcode for GameObjects了。他提供了比较中间级的接口,比如 NetworkVars, SyncVars, RPCs, scene management, Messaging System。同样有DGS模式,也支持Relay,最多支持64人(但如果不使用RPC据说可以支持更多人数)。不过这个库还比较新,感觉不够成熟。

Netcode supports the following platforms:

Windows, MacOS, and Linux
iOS and Android
XR platforms running on Windows, Android, and iOS operating systems
Most closed platforms, such as consoles. Contact us for more information about specific closed platforms.

When working with consoles (such as PlayStation, Xbox, or Nintendo Switch), there may be Netcode-specific policies you should be aware of while testing and before launching your game live. Refer to the console’s internal documentation for more information. This content is typically protected by NDA.

Mirror

https://assetstore.unity.com/packages/tools/network/mirror-129321

免费的第三方插件,也是一个高层的API。使用client-server模式,并且提供很多中间层特性,如SyncVars。

其他收费插件

DarkRift2, Photon PUN, Photon Quantum2.0这几个都是收费的。

Unity对接Steam unity联机方案_游戏

非Unity集成方案

以上方案/插件都是可以高度集成到Unity中,都是直接使用Unity C# API写逻辑的。现在有一些开源的或者自研的服务端方案,比如使用Go,Lua, C++, Rust, Java等开发的服务器,这种基本都是独立服务器DGS,服务器端就不能使用Unity的API写逻辑了,比如物理计算和寻路等,都要是有其他方案,脱离了Unity引擎,而客户端就要使用底层的网络代码,重新封装到游戏逻辑层。此方案适合大型项目或者公司本来有积累的代码库,可以最大程度的定制开发,但是成本也较高(也要看积累)。

参考资料