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

Posted

技术标签:

【中文标题】我可以在不支付 Unity Multiplayer 服务的情况下使用 Unity 网络 HLAPI 吗?【英文标题】:Can I use the Unity networking HLAPI without paying for the Unity Multiplayer service? 【发布时间】:2016-07-05 15:44:45 【问题描述】:

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

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

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

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

任何澄清将不胜感激! :)

【问题讨论】:

【参考方案1】:

您无需付费即可使用 Unity HLAPI。只需不要使用 Unity 配对 API,您就无需支付任何费用。

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

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

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

编辑

Unity 匹配 API = UnityEngine.Networking.Match 内的所有类,例如 NetworkMatch

Unity 标准 API = NetworkServerNetworkClient

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

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

【讨论】:

通过“Unity 匹配 API”,我假设您的意思是,例如,NetworkManager.StartMatchmaker()?这意味着我想要做的基本上是使用 Unity 的 NetworkManager 和我自己的 Matchmaking 系统。这就是你的答案所描述的吗?另外,“Unity 标准 API”是什么意思?您指的是 UNet HLAPI 吗? 我对问题进行了编辑。我发布的所有内容都是关于 UNet HLAPI。 无法为您的答案投票(没有足够的代表),但非常感谢您提供非常详细的解释! NetworkManager 是 Match Making API 的一部分吗?因为我们可以使用它来连接到 ip,而无需使用它附带的 matchmaker。 @LumbusterTick 是的。它具有StartMatchMaker 功能,我假设MatchMaker 是在后台实现的。是的,您可以连接另一个 IP,但我这么说是为了让他不会因为它不是免费的而想在其中使用 MatchMaker API。在 Unity 发布服务器代码之前,那些希望使用自己的服务器的人不应使用NetworkManager

以上是关于我可以在不支付 Unity Multiplayer 服务的情况下使用 Unity 网络 HLAPI 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Unity multiplayer

使用Multiplayer Networking做一个简单的多人游戏例子-1/3(Unity3D开发之二十五)

使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)

使用Multiplayer Networking做一个简单的多人游戏例子-1/3(Unity3D开发之二十五)

使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)

使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)