- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我看到了 Unity 的 Multiplayer service page ,我完全糊涂了:
我可以使用Unity's high-level networking API吗? (NetworkManager/NetworkManagerHUD) 在已发布的游戏中,无需为 Unity Matchmaker 和中继服务器(无论它们是什么)付费?
我有自己的基于云的虚拟机,我想在上面运行专用服务器。我的项目只是一个我会和 friend 一起玩的小游戏(没有商业或大型)。我想在我的 VM 上以专用服务器模式运行该游戏的已发布副本,让我的 friend 运行他们已发布的客户端副本并通过 NetworkManager 连接到服务器。
我可以免费这样做吗?我不介意我的 friend 是否必须使用 NetworkManagerHUD 在他们的游戏副本中手动输入服务器的 IP 和端口。他们这样做会算作“CCU”(Unity Personal 的限制为 20 个)吗?这会使用 Unity Matchmaker 带宽(0.49 美元/GB,Unity Personal 甚至不可用)吗?
如有任何澄清,我们将不胜感激! :)
最佳答案
您可以免费使用 Unity HLAPI
。只要不使用 Unity 配对 API,您就不需要支付任何费用。
您可以让另一个播放器直接连接到不在同一本地网络上的另一个播放器,但您需要在每台计算机上执行端口转发。玩家可以通过他们的路由器设置执行端口转发,但您不希望您的玩家经历这个。您可以从 C# 脚本进行端口转发,但如果您对网络一无所知,这会很复杂。有很多 C# 库可以做到这一点,所以你必须重新发明一个轮子。
一旦端口转发正常工作,您就可以使用 Unity 标准 API 直接连接到另一个网络中的另一个播放器。
如果您想更进一步,您可以编写一个脚本,将玩家的 IP 地址和端口号发送到您的服务器,这样玩家就可以自动相互连接,而无需手动输入 IP 地址和每台电脑的端口号。
编辑:
Unity match making 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 服务器的情况下托管您自己的游戏。现在,他们希望您付费使用他们的一些网络代码,但真正的编码人员不必这样做。
关于c# - 我可以在不支付 Unity Multiplayer 服务的情况下使用 Unity 网络 HLAPI 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36091976/
我是 Java 新手,这是我的代码, if( a.name == b.name && a.displayname == b.displayname && a.linknam
在下面的场景中,我有一个 bool 值。根据结果,我调用完全相同的函数,唯一的区别是参数的数量。 var myBoolean = ... if (myBoolean) { retrieve
我是一名研究 C++ 的 C 开发人员: 我是否正确理解如果我抛出异常然后堆栈将展开直到找到第一个异常处理程序?是否可以在不展开的情况下在任何 throw 上打开调试器(即不离开声明它的范围或任何更高
在修复庞大代码库中的错误时,我观察到一个奇怪的情况,其中引用的动态类型从原始 Derived 类型更改为 Base 类型!我提供了最少的代码来解释问题: struct Base { // some
我正在尝试用 C# 扩展给定的代码,但由于缺乏编程经验,我有点陷入困境。 使用 Visual Studio 社区,我尝试通过控制台读出 CPU 核心温度。该代码使用开关/外壳来查找传感器的特定名称(即
这可能是一个哲学问题。 假设您正在向页面发出 AJAX 请求(这是使用 Prototype): new Ajax.Request('target.asp', { method:"post", pa
我有以下 HTML 代码,我无法在所有浏览器中正常工作: 我试图在移动到
我对 Swift 很陌生。我如何从 addPin 函数中检索注释并能够在我的 addLocation 操作 (buttonPressed) 中使用它。我正在尝试使用压力触摸在 map 上添加图钉,在两
我设置了一个详细 View ,我是否有几个 Nib 文件根据在 Root View Controller 的表中选择的项目来加载。 我发现,对于 Nibs 的类,永远不会调用 viewDidUnloa
我需要动态访问 json 文件并使用以下代码。在本例中,“bpicsel”和“temp”是变量。最终结果类似于“data[0].extit1” var title="data["+bpicsel+"]
我需要使用第三方 WCF 服务。我已经在我的证书存储中配置了所需的证书,但是在调用 WCF 服务时出现以下异常。 向 https://XXXX.com/AHSharedServices/Custome
在几个 SO 答案(1、2)中,建议如果存在冲突则不应触发 INSERT 触发器,ON CONFLICT DO NOTHING 在触发语句中。也许我理解错了,但在我的实验中似乎并非如此。 这是我的 S
如果进行修改,则会给出org.hibernate.NonUniqueObjectException。在我的 BidderBO 类(class)中 @Override @Transactional(pr
我使用 indexOf() 方法来精细地查找数组中的对象。 直到此刻我查了一些资料,发现代码应该无法正常工作。 我在reducer中尝试了上面的代码,它成功了 let tmp = state.find
假设我有以下表格: CREATE TABLE Game ( GameID INT UNSIGNED NOT NULL, GameType TINYINT UNSIGNED NOT NU
代码: Alamofire.request(URL(string: imageUrl)!).downloadProgress(closure: { (progress) in
我是一名优秀的程序员,十分优秀!