C# Unity无法设置活动场景
我正在切换场景:C# Unity无法设置活动场景,c#,unity3d,unity5,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: " + Sc
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秒钟。静止活动场景是场景1,即使场景在统一中发生变化。当
SceneManager.LoadScene(“Scene2”)时,活动场景不会发生任何更改…调用“代码>时,场景直到下一帧才卸载。因此,如果Debug.Log(“当前场景:+SceneManager.GetActiveScene().name”)代码>调用之后,它将返回当前场景的名称,而不是刚刚加载的场景
即使您使用协同程序并等待帧,这也不会起作用,因为在帧之后,脚本和游戏对象将被销毁,您的Debug.Log(“当前场景:+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);
}
最后,如果不将场景添加到构建设置中,SceneManager.LoadScene(“Scene2”)代码>甚至不起作用,因此当前场景仍将是当前场景。下面是如何将场景添加到构建设置中
当场景管理器加载场景(“场景2”)调用“代码>时,场景直到下一帧才卸载。因此,如果Debug.Log(“当前场景:+SceneManager.GetActiveScene().name”)代码>调用之后,它将返回当前场景的名称,而不是刚刚加载的场景
即使您使用协同程序并等待帧,这也不会起作用,因为在帧之后,脚本和游戏对象将被销毁,您的Debug.Log(“当前场景:+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);
}
最后,如果不将场景添加到构建设置中,SceneManager.LoadScene(“Scene2”)代码>甚至不起作用,因此当前场景仍将是当前场景。下面是如何将场景添加到构建设置中
请发布场景设置的屏幕截图。@程序员我不确定您指的是什么。渲染设置?他们改变了一点UI逻辑,你能澄清一下你在找什么吗?很抱歉给您带来不便!请发布您的场景设置的屏幕截图。@程序员我不确定您指的是什么。渲染设置?他们改变了一点UI逻辑,你能澄清一下你在找什么吗?很抱歉给您带来不便!谢谢你的回答!是否有一种方法可以按程序等待,直到使用协同程序或任何其他方法加载该级别?我更愿意保留我的线性逻辑流,但如果不是这样的话,我会重新编写它。注意:即使是Update()也不起作用?不,甚至可以使用Update()
函数。就像我说的,即使是协同程序也不能做到这一点。请看我在回答中对SceneManager.sceneLoaded
所做的编辑。这是另一种方法。谢谢你的回答!是否有一种方法可以按程序等待,直到使用协同程序或任何其他方法加载该级别?我更愿意保留我的线性逻辑流,但如果不是这样的话,我会重新编写它。注意:即使是Update()也不起作用?不,甚至可以使用Update()
函数。就像我说的,即使是协同程序也不能做到这一点。请看我在回答中对SceneManager.sceneLoaded
所做的编辑。这是另一种方法。