我看到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)吗?
任何澄清将不胜感激! :)
答案 0 :(得分:52)
您无需支付即可使用Unity HLAPI
。只是不要使用Unity匹配制作API,那么你不需要为任何东西付费。
您可以让其他播放器直接连接到不在同一本地网络上的其他播放器,但您需要在每台计算机上执行端口转发。玩家可以通过路由器设置执行端口转发,但您不希望玩家通过此操作。您可以从C#脚本进行端口转发,但如果您对网络一无所知,则会很复杂。 有许多C#库可以做到这一点,所以你必须重新发明一个轮子。
一旦端口转发工作,您就可以使用 Unity标准API 直接连接到另一个网络中的其他播放器。
如果你想更进一步,你可以有一个脚本,将播放器的IP地址和端口号发送到你的服务器,这样玩家可以自动连接到彼此,而无需手动输入IP地址和每台计算机的端口号。
编辑:
Unity匹配制作API = UnityEngine.Networking.Match
内的所有课程,例如NetworkMatch
Unity标准API = NetworkServer
和NetworkClient
您不应该使用NetworkManager
,因为它的大部分功能取决于 Unity匹配制作API 。
要创建一个免于Unity匹配制作API的网络游戏,您只需要NetworkServer
和NetworkClient
类。
创建服务器:
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,您将失去创建和加入游戏等功能。您可以使用上面提到的NetworkServer
和NetworkClient
来创建完整的网络游戏。只需创建一个服务器,连接到它并开始发送和接收信息。这是值得的,因为当Unity的服务器出现故障或开始变慢时,您的游戏仍然会与其他服务器不同。
注意:Unity正致力于让您托管自己的游戏的应用程序。这还没有结束,但当他们发布它时,你将能够通过在服务器上运行该应用程序来托管自己的游戏,而无需Unity的服务器。现在,他们希望你付钱使用他们的一些网络代码,但真正的编码人员不必这样做。