我创建了一个网络应用程序,其中一些客户端使用 Unity 网络高级 API (HLAPI) 连接到纯服务器(而不是主机)。
这是我打算实现的目标:
我的服务器将场景 ServerOffline(仅使用画布 + 文本显示 OFFLINE)和 ServerOnline(使用画布 + 文本显示有关已连接客户端的信息)配置到 NetworkManager offlineScene 和 onlineScene 属性中。该 NetworkManager 显然是作为构建 1 的服务器启动的。
现在,任何客户端也有两个场景,但与服务器不同。ClientOffline 显示 DISCONNECTED 与画布 + 文本和 ClientOnline 显示应用程序本身(立方体射击球)。使用相同的 NetworkManager,但在将它作为 Build 2 的客户端启动之前,使用客户端场景(而不是服务器场景)设置了 offlineScene 和 onlineScenes 属性。
这是我得到的:
当客户端连接到服务器时,服务器将 ITS 场景强制给客户端。我期望在客户端上的场景没有加载。
题:
如何使用 Unity 网络 HLAPI 在两端使用不同的场景操作我的服务器 + 客户端?NetworkManager 方法是错误的吗?因为NetworkManager的做那么多好东西已经这将是可悲的不使用它。
非常感谢!
我会回答我自己的问题,因为我已经找到了答案。我有一个名为“Base.unity”的基本场景,其中包含 NetworkManager。
我创建了另外两个名为“Offline.unity”和“Online.unity”的场景,分别设置为 NetworkManager 属性“offlineScene”和“onlineScene”。“Offline.unity”场景只有一个画布,以彩色文本显示全屏“OFFLINE”。“Offline.unity”场景由客户端和服务器按原样使用。
但是,我记得我的目标,我希望无论何时在线,两端都有不同的场景。我创建了场景“DektopClientOnline.unity”,它只包含桌面客户端的专用资产(没有相机,没有灯光等,因为所有常见的东西都在“Online.unity”场景中),我已经创建了场景“ ServerOnline.unity”,用于服务器专用资产(基本上是显示连接客户端等的画布,没有摄像头、灯光等)。
我专门使用了 NetworkManager(称为 AppNetworkManager)并基本上覆盖了两个函数:
public override void OnClientSceneChanged(NetworkConnection conn)
{
SceneManager.LoadScene("DesktopClientOnline", LoadSceneMode.Additive);
ClientScene.Ready(conn);
ClientScene.AddPlayer(conn, 0);
}
public override void OnServerSceneChanged(string sceneName)
{
SceneManager.LoadScene("ServerOnline", LoadSceneMode.Additive);
}
Run Code Online (Sandbox Code Playgroud)
这是发生的事情:
每当服务器上线时,在加载“Online.unity”场景(配置到 NetworkManager 中)时调用 OnServerSceneChanged 回调。因此,我只是将“ServerOnline.unity”的专门内容“注入”到“Online.unity”中。我在服务器上有我想要的东西。
然后客户端连接到服务器。OnClientSceneChanged 回调在“Online.unity”场景再次加载时调用,但这次是在客户端上。我将“DesktopClientOnline.unity”的专门内容“注入”到“Online.unity”中。我有我想要的客户端。
希望这可以帮助任何人!
| 归档时间: |
|
| 查看次数: |
3626 次 |
| 最近记录: |