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"); 。 在AwakeStart函数中放置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 SettingsSceneManager.LoadScene("Scene2"); 甚至不会工作,所以你当前的场景仍然是你当前的场景。 下面是如何将场景添加到构建设置

在此处输入图像描述