IEnumerator OnLoadLevel(SceneType level) { int displayProgress = 0; int toProgress = 0; int levelIndex = (int)level; AsyncOperation op = SceneManager.LoadSceneAsync(levelIndex); op.allowSceneActivation = false; while (op.progress < 0.9f) { toProgress = (int)op.progress * 100; while (displayProgress < toProgress) { ++displayProgress; loaderPanel.SetLoaderProgress(displayProgress); yield return(new WaitForEndOfFrame()); } } toProgress = 100; while (displayProgress < toProgress) { ++displayProgress; loaderPanel.SetLoaderProgress(displayProgress); yield return(new WaitForEndOfFrame()); } op.allowSceneActivation = true; yield return(new WaitForEndOfFrame()); loaderScene.OnLeaveScenel(sceneType, delegate() { panelMgr.ClosePanel(UI.PanelName.LoaderPanel); GetScene(sceneType.ToString()).OnEnterScene(sceneType); }); }
/// <summary> /// 加载场景 /// </summary> /// <param name="level"></param> public void LoadLevel(SceneType level) { sceneType = level; if (loaderScene == null) { loaderScene = Game.GetScene <LoaderScene>(); } loaderPanel = panelMgr.CreatePanel(UI.PanelName.LoaderPanel) as LoaderPanel; loaderPanel.SetLoaderProgress(0); var scene = SceneManager.GetActiveScene(); SceneType currentLevel = (SceneType)scene.buildIndex; StartCoroutine(OnLoadLoaderLevel(currentLevel)); }