14

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

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

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

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

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

4

1 回答 1

55

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

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

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

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

编辑

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

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

于 2016-03-18T18:48:29.887 回答