我是否可以在不支付Unity多人游戏服务的情况下使用Unity网络HLAPI?

我看到了Unity的多人游戏服务页面 ,我完全糊涂了:

我是否可以在已发布的游戏中使用Unity的高级网络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所有类,例如NetworkMatch

Unity标准API = NetworkServerNetworkClient

您不应该使用NetworkManager因为它的大部分function都取决于Unity匹配制作API

要创建一个免于Unity匹配制作API的网络游戏,您只需要NetworkServerNetworkClient类。

要创建服务器

 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,您将失去创建和加入游戏等function。 您可以使用我上面提到的NetworkServerNetworkClient来创建一个完整的网络游戏。 只需创建一个服务器,连接到它并开始发送和接收信息。 这是值得的,因为当Unity的服务器出现故障或开始变慢时,您的游戏仍然会与其他服务器不同。

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