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
放在Awake
或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);
}
最后,如果您不将场景添加到 Build Settings,SceneManager.LoadScene("Scene2");
甚至不会工作,所以您当前的场景仍然是您当前的场景.下面是如何将场景添加到 Build Settings.
我正在切换场景:
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
放在Awake
或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);
}
最后,如果您不将场景添加到 Build Settings,SceneManager.LoadScene("Scene2");
甚至不会工作,所以您当前的场景仍然是您当前的场景.下面是如何将场景添加到 Build Settings.