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
。
- 不同文件夹中的场景可以具有相同的名称。 (可能是偏执狂 ;))
- 我想使用
int
比 string
稍微快一些(可能是微改进)
我有一个场景和一个游戏结束后重新启动场景的按钮。我在游戏对象的脚本中也有一个 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
。
- 不同文件夹中的场景可以具有相同的名称。 (可能是偏执狂 ;))
- 我想使用
int
比string
稍微快一些(可能是微改进)