问题描述
我有一个 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