Unity无法设置ActiveScene

Unity cannot set 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); 在那之后立即调用,它将 return 当前场景的名称,而不是刚刚加载的场景。

即使您使用协程并等待一个帧,这也不会起作用,因为在一个帧之后,脚本和 GameObject 将被销毁并且您的 Debug.Log("Current scene: " + SceneManager.GetActiveScene().name); 不会到达 运行.

不要在 SceneManager.LoadScene("Scene2"); 之后立即调用 SceneManager.GetActiveScene().name。将SceneManager.GetActiveScene().name放在AwakeStart函数中,场景加载后就可以获取场景名称。

编辑:

另一件事是订阅 事件。现在,呼叫 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"); 甚至不会工作,所以您当前的场景仍然是您当前的场景.下面是如何将场景添加到 Build Settings.