2016-12-01 49 views
2

我创建了一个networtk应用程序,其中一些客户端使用Unity网络高级API(HLAPI)连接到纯服务器(而非主机)。使用Unity网络的服务器和客户端的不同场景HLAPI

这是我打算做到:

我的服务器有幕后ServerOffline(只显示脱机帆布+文字)配置到NetworkManager的offlineScene和ServerOnline(约连接的客户端也用帆布+文本显示的相关信息)和onlineScene属性。该NetworkManager显然是作为构建服务器1启动的。

现在,任何客户端也有两个场景,但与服务器不同。 ClientOffline显示DISCONNECTED与画布+文本和ClientOnline显示应用程序本身(立方体拍摄球体)。同样NetworkManager的使用,但offlineScene和onlineScenes属性设置与客户场景(而不是服务器场景)启动它作为客户端构建之前2.

这里是我所得到的:

当客户端连接到服务器,服务器将ITS场景强制给客户端。我期望在客户端上的场景没有加载。

问题:

如何将我的服务器+客户端上使用统一的网络HLAPI两端使用不同的场景进行操作? NetworkManager方法错了吗?因为NetworkManager已经有很多好东西了,所以不要使用它。

非常感谢!

回答

3

我会回答我自己的问题,因为我找到了答案。我有一个名为“Base.unity”的基础场景,其中包含NetworkManager。

我已经分别为NetworkManager属性“offlineScene”和“onlineScene”创建了另外两个名为“Offline.unity”和“Online.unity”的场景。 “Offline.unity”场景只有一个以彩色文本显示全屏“OFFLINE”的画布。客户端和服务器都使用“Offline.unity”场景。但是,我记得我的目标,我希望在线时两端都有不同的场景。我创建了一个场景“DektopClientOnline.unity”,它只包含桌面客户端的专用资源(没有摄像头,没有灯光等,因为所有常见的东西都在“Online.unity”场景中),并且我创建了场景“ ServerOnline.unity“用于服务器专用资源(基本上是一个画布,显示连接的客户端等,没有摄像头,灯光等)。

我有专门的网络管理器(称为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); 
} 

这里是发生了什么:

每当服务器上线时,OnServerSceneChanged调用回调函数时,“在线.unity“场景(配置到NetworkManager中)被加载。因此,我只是将“ServerOnline.unity”的专用内容“注入”到“Online.unity”中。我有我想要的服务器上。

然后客户端连接到服务器。 OnClientSceneChanged回调会在再次加载“Online.unity”场景时调用,但这次是在客户端上。我将“DesktopClientOnline.unity”的特殊内容“注入”到“Online.unity”中。我有我想要的客户。

希望这可以帮助任何人!

相关问题