Unity SceneManager 加载场景,Start/Awake 在加载时不运行

问题描述

我有一个 StartupScript,我想在每次(重新)加载场景时运行它。

当我加载场景 1 时,脚本会运行。
当我加载场景 2 时,脚本会运行。
当我回到场景 1 时,脚本没有运行。

如何强制 StartupScript 在每次加载场景时运行?

脚本存在于每个场景中,位于预制件 StartScriptHolder 上。

我正在研究 SceneManager:也许通过创建和删除场景的命名实例,我可以强制每次都生成 StartupScript
仅仅为了运行单个脚本而创建和丢弃完整的场景似乎非常低效。

解决方法

我不知道你是如何处理场景之间的交换的。您是否尝试过使用 SceneManager 中的 UnloadSceneAsync? (https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.UnloadSceneAsync.html)

我在一个项目中工作,我必须做同样的事情。我卸载了一个场景,如果我再次加载它,我需要再次运行 Start 函数。

    SceneManager.LoadScene("SceneName",LoadSceneMode.Additive); //Loading the new scene
    SceneManager.UnloadSceneAsync(val); // Unloading current scene

在这种情况下,我正在做的是按名称和附加模式加载新场景(这是我的要求,但您可以使用其他模式加载它。 之后我使用该功能,我建议您使用需要场景ID作为参数的功能。您可以在构建设置窗口中找到此 ID。 BuildSettings Window