因为以下原因 LoadScene 和 SetActiveScene 不能立即连续使用
问题
SceneManager.LoadScene之后调用SceneManager.SetActiveScene报错,提示场景未加载。(ArgumentException: SceneManager.SetActiveScene failed; scene ‘XXX’ is not loaded and therefore cannot be set active)
原因:SceneManager.LoadScene
Unity5.x
这个函数调用后马上加载场景
Unity2017.x
这个函数调用后第二帧结束的时候完成加载
2017/2018的文档说明:“When using SceneManager.LoadScene, the loading does not happen immediately, it completes in the next frame. This semi-asynchronous behavior can cause frame stuttering and can be confusing because load does not complete immediately.”
解决办法
void Start()
{
SceneManager.sceneLoaded += OnSceneLoaded;
SceneManager.LoadScene(sceneName, LoadSceneMode.Additive);
}
void OnSceneLoaded(Scene a, LoadSceneMode mode)
{
SceneManager.SetActiveScene(SceneManager.GetSceneByName(a.name));
this.initUI();
}
本文探讨了Unity中SceneManager.LoadScene与SetActiveScene的正确使用方法,解释了在Unity2017及以上版本中,场景加载在下一帧才完成的原因,提供了一个有效避免报错的解决方案,即在场景加载完成后通过事件回调SetActiveScene。
4889

被折叠的 条评论
为什么被折叠?



