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); }); }