【问题标题】:Load Scene is not restarting the scene properly加载场景未正确重新启动场景
【发布时间】:2021-11-01 12:56:03
【问题描述】:

当玩家失败时,我试图重新开始我的游戏,我玩了一个协程,让玩家忽略碰撞和从平台上掉下来。然后当玩家点击一个按钮时,相同的场景被重新加载。

SceneManager.LoadScene("GameScene")

但是当场景再次加载时,玩家仍然会忽略碰撞而摔倒,这就像场景加载但第一次玩游戏时的方式不同。

¿如何在不关闭应用程序并再次打开它的情况下正确重新加载场景?

谢谢。

【问题讨论】:

  • 这不应该发生,加载场景应该足以将所有对象重置为其初始设置。除非该对象被标记为“不要在加载时销毁”。或者你修改了一些不是对象属性的东西。你究竟做了什么让玩家忽略碰撞?您是否偶然使用了 Physics.IgnoreLayerCollision 或类似的东西?
  • 是的,我在协程中使用 Physics2D.IgnoreLayerCollision,我认为重新加载场景是重置所有设置的最佳选择,但我不明白为什么会发生这种情况。
  • 玩家是单身还是使用staticDontDestroyOnLoad的东西?
  • 是的,我对播放器使用了单例模式,但是重新加载场景不会破坏播放器?

标签: c# unity3d scene-manager


【解决方案1】:

问题是您为此使用了Physics2D.IgnoreLayerCollision

该属性是全局的,它影响所有场景,与特定场景无关。 SceneManager.LoadScene 重置的只是与特定场景或场景中的对象相关的属性。

你有两个选择:

  1. 不要使用IgnoreLayerCollision。例如,一种替代方法可能是禁用播放器上的所有碰撞器。例如,您可以使用GetComponentsInChildren 来查找所有对撞机。

  2. 手动重置IgnoreLayerCollision

【讨论】:

  • 感谢您的回答。实际上,解决方案是在重新启动游戏后简单地重置 ignoreLayerCollision。非常感谢
猜你喜欢
  • 2016-06-22
  • 2022-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多