SceneLoadObject GetNextSceneLoadObject(eSceneName nextScene) { if (_dic.ContainsKey(nextScene)) { return(_dic[nextScene]); } return(null); }
public void SceneLoad(eSceneName sceneName) { //새로운 씬을 불러오게 될 경우는 전투씬이거나 기존의 화면을 아얘 지운다고 가정 //이전에 만들어진 UI프리팹은 일단 지운다. UIManager._Instance.ContentPopupAllDestroy(); _isSceneLoadComplete = false; StartCoroutine(LoadingSceneLoad(GetPrvSceneName(), sceneName)); }
//<summary> //function : 加载新场景 //<summary> public static void LoadLevel(eSceneName _scene) { //加载下一个场景 g_CurSceneInfo = g_dicNextSceneInfo[_scene]; //加载切换场景. UnityEngine.SceneManagement.SceneManager.LoadSceneAsync ("MapLoading"); }
IEnumerator LoadingSceneLoad(eSceneName prvSceneName, eSceneName nextScene) { //로드할 오브젝트가 있는 씬마다 있는 로드객체 클래스 SceneLoadObject loadObj = GetNextSceneLoadObject(nextScene); //로딩씬에서 모든 로드를 진행한다. yield return(SceneManager.LoadSceneAsync(eSceneName.Loading.ToString(), LoadSceneMode.Additive)); //동적 타입으로 지정된 에셋번들을 언로드 처리 AssetBundleManager.Instance.DynamicBundleUnload(); //이전 씬 언로드 yield return(SceneManager.UnloadSceneAsync(prvSceneName.ToString())); yield return(loadObj != null?loadObj.CorouctineLoadPrefab() : null); //로딩 게이지 업데이트 ProgressUpdate(0.5f); SceneManager.sceneLoaded += OnSceneLoaded; AsyncOperation nextSceneOper = SceneManager.LoadSceneAsync(nextScene.ToString(), LoadSceneMode.Additive); //진행도 업데이트 while (nextSceneOper.isDone != true) { yield return(waitSec); ProgressUpdate(0.5f + (nextSceneOper.progress * 0.5f)); } yield return(SceneManager.UnloadSceneAsync(eSceneName.Loading.ToString())); yield return(new WaitForSeconds(0.5f));; if (_isSceneLoadComplete) { OnLoadingComplete?.Invoke(); StopAllCoroutines(); } }