【问题标题】:Trying to totally reload scene试图完全重新加载场景
【发布时间】:2019-05-27 21:46:15
【问题描述】:

我制作了一个代表游戏主菜单的场景。在这个菜单中有一个单人游戏选项,当我按下它时,它会打开一个新的“1级”场景。
此外,还有一个暂停菜单,允许玩家退出游戏并返回主菜单。
但是,在它返回主菜单后,当我尝试使用 SceneManager.LoadScene("level 1") 进入 1 级场景时,会出现很多问题。这意味着很多游戏对象的行为都不尽如人意。

我不知道为什么会这样,如果有人可以帮助我解决它,我将不胜感激。谢谢。

【问题讨论】:

  • “很多问题”是什么意思?您需要具体告诉我们发生了什么,什么不起作用。
  • 例如,我有一个盒子,如果我碰撞它并按下一个特定的键,它应该会坏掉。但是它没有发生,我可以碰撞盒子但似乎脚本不起作用
  • 是否只有在重新加载场景后才会出现问题?
  • 或者这个错误: MissingReferenceException: 'Transform' 类型的对象已被破坏,但您仍在尝试访问它。您的脚本应该检查它是否为空,或者您不应该销毁该对象。 UnityEngine.Transform.set_position (UnityEngine.Vector3 值) in :0 CrashBandicootMovementControl.Update () (在 Assets/Scripts/CrashBandicootMovementControl.cs:150)
  • @Technoguyfication 是

标签: c# unity3d


【解决方案1】:

您可以使用SceneManager.LoadScene("level 1", LoadSceneMode.Single);清除旧场景,只加载新场景,这样您可以获得清晰的场景,应该没有任何问题。

如果您的脚本需要持续进入新场景,您可以在脚本中使用DontDestroyOnLoad(this);,它们将进入新场景。问题是您必须确保没有被破坏的脚本不会尝试访问被破坏的对象。从您的评论看来,您的玩家移动控制器没有被破坏,或者它正在菜单场景中创建,并且在重新加载场景时它的引用没有正确更新。您还可以在通过场景更改保存的脚本中使用Destroy(this);,以便在它们完成运行时将其删除。

【讨论】:

  • 我有一个问题,如果我按照你在第一行中写的那样重新加载场景,是否会重新开始?
猜你喜欢
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
  • 2016-11-29
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
相关资源
最近更新 更多