private IEnumerator RunLoad <T>(string scenePath, object bundle, string transition = TransitionFactory.FadeTransition) where T : IScene { if (IsLoading) { Debug.LogWarning("Scenes is loading, do not load again"); yield break; } isLoading = true; var lst = curScene; if (lst != null) { //VRProfiler.StartWatch(string.Format("[LoadingScene] Scene: {0} UnLoad ", lst.Name)); Events.DispathMsg(Event_OnUnload, lst.Name); lst.Unload(); //VRProfiler.StopWatch(); } //VRProfiler.StartWatch("[LoadingScene] Transition In "); curScene = null; if (null == mask) { mask = TransitionFactory.CreateTransition(transition); } mask.DontDestroyOnLoad(); SetRaycast(false); yield return(mask.TransitIn(TransitionLength)); //VRProfiler.StopWatch(); //VRProfiler.StartWatch("[LoadingScene] Switch To Scene: Loading "); //销毁场景物件 if (lst != null) { Destroy(lst.UnityObject); } //切换至空场景 UnitySceneMgr.LoadScene(VRScene.Loading); //VRProfiler.StopWatch(); //VRProfiler.StartWatch("[LoadingScene] Unload Unused Assets "); //资源回收 yield return(1); yield return(Resources.UnloadUnusedAssets()); GC.Collect(); //VRProfiler.StopWatch(); //VRProfiler.StartWatch(string.Format("[LoadingScene] Switch to Scene:{0} ",scenePath)); //切换下一场景 yield return(UnitySceneMgr.LoadSceneAsync(scenePath)); SetRaycast(true); //场景handler curScene = GetMissingSceneObj <T>(); curScene.Name = scenePath; curScene.gameObject.name = curScene.GetType().Name; //配置场景相关内容 curScene.name = "[scene] " + curScene.Name; // VRProfiler.StopWatch(); //场景加载完成 isLoading = false; //VRProfiler.StartWatch(string.Format("[LoadingScene] Scene: {0} Preload ", curScene.Name)); curScene.Preload(bundle); //VRProfiler.StopWatch(); //等待场景 //VRProfiler.StartWatch(string.Format("[LoadingScene] Scene: {0} Wait ", curScene.Name)); yield return(curScene.Wait()); // VRProfiler.StopWatch(); //VRProfiler.StartWatch(string.Format("[LoadingScene] Scene: {0} Loaded ", curScene.Name)); curScene.Loaded(); Events.DispathMsg(Event_OnLoaded, curScene.Name); //VRProfiler.StopWatch(); //VRProfiler.StartWatch("[LoadingScene] Transition Out "); //黑幕打开 if (null != mask) { yield return(mask.TransitOut(TransitionLength)); mask.DestroySelf(); mask = null; } //VRProfiler.StopWatch(); yield return(1); //加载完成 curScene.Opened(); }