我正在切换场景:
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中的场景发生了变化。什么都没有改变活动场景...
答案 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().name
或Awake
函数中,您就可以在场景加载后获取场景名称。
修改强>
要做的另一件事是订阅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);
}
将无法工作,因此您当前的场景仍将是您当前的场景。以下是如何将场景添加到构建设置。