我可以在不支付 Unity Multiplayer 服务的情况下使用 Unity 网络 HLAPI 吗?

Can I use the Unity networking HLAPI without paying for the Unity Multiplayer service?

看到Unity的Multiplayer service page,完全懵了:

我可以在已发布的游戏中使用 Unity's high-level networking API (NetworkManager / NetworkManagerHUD) 而无需支付 Unity Matchmaker 和中继服务器(无论它们是什么)吗?

我有我自己的基于云的 VM,我想 运行 一个专用服务器。我的项目只是一个我会和朋友一起玩的小游戏(没有商业或大型)。我想 运行 在我的 VM 上以专用服务器模式发布该游戏的副本,并让我的朋友 运行 他们发布的客户端副本并通过 NetworkManager 连接到服务器。

我可以免费这样做吗?我不介意我的朋友是否必须使用 NetworkManagerHUD 在他们的游戏副本中手动输入服务器的 IP 和端口。他们这样做会算作 "CCU"(Unity Personal 的限制为 20)吗?这会使用 Unity Matchmaker 带宽($0.49 / GB,Unity Personal 甚至不可用)吗?

如有任何澄清,我们将不胜感激! :)

您可以免费使用 Unity HLAPI。只要不使用 Unity 匹配API,那么您就不需要支付任何费用。

您可以让另一个播放器直接连接到不在同一本地网络上的另一个播放器,但您需要在每台计算机上执行端口转发。玩家可以通过他们的路由器设置执行端口转发,但您不希望您的玩家经历这个。您可以从 C# 脚本进行端口转发,但如果您对网络一无所知,这会很复杂。 有很多C#库可以做到这一点让你不得不重新造轮子。

端口转发工作后,您就可以使用 Unity 标准 API 直接连接到另一个网络中的另一个播放器。

如果你想更进一步,你可以有一个脚本,将玩家的 IP 地址和端口号发送到你的服务器,这样玩家就可以自动相互连接,而无需手动输入 IP每台计算机的地址和端口号。

编辑 :

Unity撮合API=UnityEngine.Networking.Match里面的所有class,比如NetworkMatch

统一标准API=NetworkServer and NetworkClient

你不应该使用 NetworkManager 因为它的大部分功能依赖于 Unity 匹配 API

要创建一个没有 Unity 配对的网络游戏 API,您只需要 NetworkServerNetworkClient class。

创建服务器:

NetworkServer.Listen

它有重载的方法,例如

public static bool Listen(string ipAddress, int serverPort);
public static bool Listen(int serverPort);

创建客户端(连接到服务器):

NetworkClient.Connect
public void Connect(string serverIp, int serverPort);

如果你不想使用Unity匹配,你将失去创建和加入游戏等功能API。您可以使用我上面提到的 NetworkServerNetworkClient 来创建一个完整的网络游戏。只需创建一个服务器,连接到它并开始发送和接收信息。这是值得的,因为当 Unity 的服务器出现故障或开始变慢时,您的游戏仍然可以正常运行,与其他游戏不同。

注意:Unity 正在开发可让您托管自己的游戏的应用程序。这还没有出来,但是当他们发布它时,您将能够通过 运行 服务器上的应用程序在没有 Unity 服务器的情况下托管您自己的游戏。现在,他们希望您付费使用他们的一些网络代码,但真正的编码员不必这样做。