如果我有你的權利,你有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的場景中的所有,但代碼在遊戲啓動實例吧。這樣我就可以完全控制它的一生。
場景會引發很多令人頭疼的事情,因爲數據不會*被認爲會持續存在於它們之間,並且執行保留對象的事件會引發他們自己的頭痛。確保你的Netowrk Manager沒有被複制(或者正在嘗試實例化現有實例的數據)。 – Draco18s
我剛剛獲得了網絡管理者腳本,這個腳本作爲一個組件添加到一個名爲_NETMANAGER_的空的遊戲對象中,並且由於某種原因,它在從大廳切換到遊戲時保持一切,但是當離開遊戲並返回到大廳時,連接到網絡管理器對象的HostGame腳本變成其中一個空白腳本。 –