如果我有你的权利,你有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脚本变成其中一个空白脚本。 –