Unity无法设置ActiveScene

时间:2017-04-14 22:53:21

标签: c# unity3d unity5

我正在切换场景:

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中的场景发生了变化。什么都没有改变活动场景...

1 个答案:

答案 0 :(得分:2)

调用SceneManager.LoadScene("Scene2");时,场景直到下一帧才会卸载。因此,如果在此之后调用Debug.Log("Current scene: " + SceneManager.GetActiveScene().name);,它将返回当前场景的名称,而不是刚刚加载的场景。

即使您使用协同程序并等待一个框架,这也不会起作用,因为在一个框架之后,脚本和 GameObject 将被销毁,而您的Debug.Log("Current scene: " + SceneManager.GetActiveScene().name);将无法获得跑。

请勿在{{1​​}}之后立即致电SceneManager.GetActiveScene().name。将SceneManager.LoadScene("Scene2");放在SceneManager.GetActiveScene().nameAwake函数中,您就可以在场景加载后获取场景名称。

修改

要做的另一件事是订阅SceneManager.sceneLoaded事件。现在,请致电Start。当场景加载完成后,应该调用注册的函数。

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); } 将无法工作,因此您当前的场景仍将是您当前的场景。以下是如何将场景添加到构建设置

enter image description here