2017-01-15 48 views
1

在網絡遊戲項目從Unity Multiplayer Tutorial,如何一個應該去改變的場面,到一個新的水平/地圖,同時保持相機在一個總體的主/播放器GO /健康等下面就現場。 (例如Gameplay.unity與Level1.unity或Level2.unity添加到它)團結5.3+網絡負載下一級

所有相關的幫助似乎是遺留代碼,單人的解決方案或更專業的情況。目前的Unity 5.5文檔建議ServerChangeScene - 這似乎只提供了一半的解決方案。

是否有類似ServerAddSceneServerGetScene是否存在?

嘗試的解決方案一直在使用DontDestroyOnLoad在主場景知GameObjects並保持currentMapNumber變量客戶NetworkManagers當玩家達到最終的級別觸發器被更新保持同步。這然後在更新()方法檢查和如預期或者調用

networkManager.ServerChangeScene("Level" + networkManager.GetComponent<NetGame>().mapNumber); 

SceneManager.LoadScene("Level" + networkManager.GetComponent<NetGame>().mapNumber, LoadSceneMode.Additive); 

均未工作。

+0

嗨rogod你找到任何解決方案。我也在尋找在整體netwrok加法場景加載 –

+0

尚未 - 我知道有很多人有這個問題,但沒有人似乎有誰回答誰看到這個線程呢。 - 我的項目基本上處於擱置狀態,直到我很好地解決了這個問題。 :( – Rogod

回答

0

我可以通過添加劑的場景加載我用這個代碼來做到這一點。

[ClientRpc] 
    public void RpcLoadLevelAcrossNetwork() { 
     SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); 
    } 

ClientRpc將會加載新的場景到所有連接的客戶端和添加劑場景加載將允許你保存相機/播放器GO /健康等

+0

雖然這種方式有效,但它只加載沒有NetworkIdentity的場景中的對象 爲了達到期望的效果,似乎必須使用ServerChangeScene並將對象設置爲DoNotDestroyOnLoad。 但是,必須確保只有服務器運行這個方法時,它通過SyncVar檢測地圖變更請求(在類似的場景經理腳本)。 總之,我現在的工作,但它並不像那樣簡單文件使它成爲 – Rogod

+0

@ Rogod AH ..,這是我過去幾天面臨的問題,你說的沒錯,networkidentiy對象沒有加載我的代碼,我該如何改正它? stackoverflow.com/questions/41909305/spawn-scene-object-not-found-for-1 –

+0

我不得不訴諸使用ServerChangeScene而不是這個,因爲我不能找到一種方法來獲取加載NetworkIdentity的對象。 我目前只是設置所有我想保持DoNotDestroyOnLoad和使用ServerChangeScene。 – Rogod