Unity无法设置ActiveScene
我正在切换场景:
SceneManager.LoadScene("Scene2"); Debug.Log("Current scene: " + SceneManager.GetActiveScene().name);
调试说:
Current scene: Scene1
我也试过这个:
SceneManager.LoadScene("Scene2"); StartCoroutine(WaitUntilEndOfFrame()); Debug.Log("Current scene: " + SceneManager.GetActiveScene().name); private IEnumerator WaitUntilEndOfFrame() { yield return new WaitForEndOfFrame(); }
仍然说
Current scene: Scene1.
我试过SetActiveScene(SceneManager.GetSceneByBuildId(1));
我已经尝试将其作为协程启动,我已经尝试过并等待5秒钟。 仍然是ActiveScene是Scene1,即使Unity中的场景发生了变化。 什么都没有改变活动场景……
当SceneManager.LoadScene("Scene2");
被调用,场景直到下一帧才卸载。 所以,如果Debug.Log("Current scene: " + SceneManager.GetActiveScene().name);
在此之后调用它,它将返回当前场景的名称,而不是刚刚加载的场景。
即使你使用协程并等待一个帧,这也不会起作用,因为在一个帧之后,脚本和GameObject将被销毁并且你的Debug.Log("Current scene: " + SceneManager.GetActiveScene().name);
不会跑。
不要在SceneManager.LoadScene("Scene2");
之后调用SceneManager.GetActiveScene().name
SceneManager.LoadScene("Scene2");
。 在Awake
或Start
函数中放置SceneManager.GetActiveScene().name
,您将能够在场景加载后获取场景名称。
编辑:
另一件事是订阅SceneManager.sceneLoaded
事件。 现在,调用SceneManager.LoadScene("Scene2");
。 当场景加载完成后,应该调用注册的函数。
void Start() { SceneManager.LoadScene("Scene2"); } void OnEnable() { SceneManager.sceneLoaded += this.OnLoadCallback; } private void OnLoadCallback(Scene scene, LoadSceneMode sceneMode) { UnityEngine.Debug.Log("Current scene: " + SceneManager.GetActiveScene().name); }
最后,如果您不将场景添加到Build Settings , SceneManager.LoadScene("Scene2");
甚至不会工作,所以你当前的场景仍然是你当前的场景。 下面是如何将场景添加到构建设置 。