2016-12-01 51 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」中。我有我想要的客戶。

希望這可以幫助任何人!

相關問題