Unity C# 场景管理

Unity C# Scene Management

我有一个场景和一个游戏结束后重新启动场景的按钮。我在游戏对象的脚本中也有一个 OnDestroy() 函数。一切正常,但我很好奇如果我通过跟踪活动场景再次启动场景,是否会调用 OnDestroy() 函数。

当游戏结束并且玩家按下重新启动按钮时将调用此函数;

private void reStart()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    }

如果玩家直接进入菜单场景,调用OnDestroy()函数。

我的问题是,通过调用reStart() 函数,OnDestroy() 函数是否也会被调用,还是我应该寻求其他解决方案?如果不是,是否只能转到另一个场景然后返回播放场景,还是有其他方法可以做到这一点?

非常感谢您的回答。

此场景与您的菜单场景有何不同?

,调用OnDestroy

LoadScene的场景模式默认为

Single: Closes all current loaded Scenes and loads a Scene.

所以你加载一个“新”场景,卸载当前场景 -> 破坏当前对象。

(Except 如果你在某处使用 DontDestroyOnLoad .. 这似乎不是这种情况,否则如果你加载菜单场景它也不会被破坏。 )

总之,你可以很容易地自己找到它:

private void OnDestroy()
{
    Debug.Log($"I just got destroyed {name}");
}

只是一个旁注,我通常更喜欢用 Scene.buildIndex 而不是 Scene.name

  • 不同文件夹中的场景可以具有相同的名称。 (可能是偏执狂 ;))
  • 我想使用 intstring 稍微快一些(可能是微改进)