2017-04-26 24 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的场景中的所有,但代码在游戏启动实例吧。这样我就可以完全控制它的一生。

相关问题