我正在切换场景:
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 秒钟。即使场景在 Unity 中发生变化,ActiveScene 仍然是 Scene1。没有任何改变活动场景......
When SceneManager.LoadScene("Scene2");
被调用时,场景直到下一帧才会卸载。因此,如果Debug.Log("Current scene: " + SceneManager.GetActiveScene().name);
之后立即调用,它将返回当前场景的名称,而不是刚刚加载的场景。
即使您使用协程并等待帧,这也不起作用,因为在帧之后,脚本和游戏对象将被摧毁,你的Debug.Log("Current scene: " + SceneManager.GetActiveScene().name);
将无法运行。
不要打电话SceneManager.GetActiveScene().name
就在之后SceneManager.LoadScene("Scene2");
. Put SceneManager.GetActiveScene().name
in the Awake
or Start
函数,您将能够在场景加载后获取场景名称。
EDIT:
另一件要做的事是订阅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);
}
最后,如果您不将场景添加到构建设置, SceneManager.LoadScene("Scene2");
甚至不会工作,所以你当前的场景仍然是你当前的场景。下面介绍如何添加场景构建设置.
![enter image description here](https://i.stack.imgur.com/1KCSc.gif)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)