2017-04-26 21 views
0

因此,我在網絡管理器中添加了一個名爲「HostGame」的腳本,當按下「Create Lobby」按鈕時,「HostGame」開始一場婚介比賽。當我按下離開遊戲按鈕時,一個不同的腳本將我從比賽中斷開,並且遊戲變回大廳場景,但是創建大廳按鈕已經失去了對主機遊戲腳本的引用,即使網絡管理器從未去過遠。Unity(C#) - 即使在使用dontdestroyonload時場景中的網絡管理器上的腳本也被禁用

我在「HostGame」中添加了一個「OnDisable」事件,它在禁用時寫入到控制檯,這是我按下離開遊戲的地方,其中「HostGame」被禁用。

任何想法?

感謝

+0

場景會引發很多令人頭疼的事情,因爲數據不會*被認爲會持續存在於它們之間,並且執行保留對象的事件會引發他們自己的頭痛。確保你的Netowrk Manager沒有被複制(或者正在嘗試實例化現有實例的數據)。 – Draco18s

+0

我剛剛獲得了網絡管理者腳本,這個腳本作爲一個組件添加到一個名爲_NETMANAGER_的空的遊戲對象中,並且由於某種原因,它在從大廳切換到遊戲時保持一切,但是當離開遊戲並返回到大廳時,連接到網絡管理器對象的HostGame腳本變成其中一個空白腳本。 –

回答

0

如果我有你的權利,你有NetworkManager已在大堂現場遊戲物體N,其Dont Destroy On Load屬性集。 此外,您還有另一個GameObject R在場景中引用N

現在,這種情況發生:

  • 比賽開始
  • 您在 「Lobby.scene」
  • 在登錄遊戲對象,除了在N 「Lobby.scene」
    • 一切(因爲DontDestroyOnLoad)被銷燬。
  • 遊戲一會兒
  • 在註銷
    • 一切都在 「Game.scene」 除了N(因爲DontDestroyOnLoad的)運行NetworkManager的負載場景 「Game.scene」 被破壞。
    • NetworkManager的負載場景「Lobby.scene」
    • 你現在有2個GameObjects N#1和#N 2用NetworkManager的,因爲原來從來沒有被破壞,但你也裝一個新的實例從「Lobby.scene」
    • R從 「Lobby.scene」 和引用N#裝載2
    • NetworkManager的#2執行其Awake(),檢測已經有另一網絡管理器,並破壞本身和它的遊戲對象N#2
    • R現在缺少一個參考,爲N#2不復存在

您可以驗證這是問題在您的NetworkManager來「開發」設置LogLevel。返回大廳後,你應該看到在您的控制檯下面的日誌輸出:

Multiple NetworkManagers detected in the scene. Only one NetworkManager can exist at a time. The duplicate NetworkManager will not be used. 

我解決這個問題通常不具有NetworkManager的場景中的所有,但代碼在遊戲啓動實例吧。這樣我就可以完全控制它的一生。

相關問題