public IEnumerator FlowScene(SceneFlowEvent flowBody)
        {
            if (flowBody.SceneMode == LoadSceneMode.Additive)
            {
                //不会黑屏..但是在卸载前会有两个场景共存..内存会很大
                yield return(service.LoadSceneAsync(flowBody.LoadSceneName, flowBody.SceneMode, flowBody.ExtraBindings));

                if (!string.IsNullOrEmpty(flowBody.UnloadSceneName))
                {
                    yield return(service.UnloadSceneAsync(flowBody.UnloadSceneName, true));
                }
            }
            else if (flowBody.SceneMode == LoadSceneMode.Single)
            {
                //如果是Single会在加载之前会卸载其他所有的场景,为了保证上个场景全部清理完毕后再销毁..所以先执行
                //但这个方法有个问题..切换场景会短暂黑屏
                if (!string.IsNullOrEmpty(flowBody.UnloadSceneName))
                {
                    yield return(service.UnloadSceneAsync(flowBody.UnloadSceneName));

                    //因为是先卸载的..所以这个可以是null..
                    App.SceneContainer = null;
                }
                yield return(service.LoadSceneAsync(flowBody.LoadSceneName, flowBody.SceneMode, flowBody.ExtraBindings));
            }
            if (flowBody.CallBack != null)
            {
                flowBody.CallBack.Invoke();
            }
            //立即进行垃圾回收
            GC.Collect();
            GC.WaitForPendingFinalizers();//挂起当前线程,直到处理终结器队列的线程清空该队列为止
            GC.Collect();
        }
 private void SubscribeOnExitButton()
 {
     exitButton.onClick.AddListener(() =>
     {
         StartCoroutine(sceneService.LoadSceneAsync(SceneType.Menu));
     });
 }
Exemple #3
0
        private void Start()
        {
            SetPauseMenuVisibility(false);

            continueButton.onClick.AddListener(() =>
            {
                Time.timeScale = 1f;
                OnContinueButtonPressed?.Invoke();
                SetPauseMenuVisibility(false);
            });

            pauseButton.onClick.AddListener(() =>
            {
                Time.timeScale = 0f;
                OnPauseButtonPressed?.Invoke();
                SetPauseMenuVisibility(true);
            });

            exitButton.onClick.AddListener(() =>
            {
                Time.timeScale = 1f;
                OnExitButtonPressed?.Invoke();
                StartCoroutine(sceneService.LoadSceneAsync(SceneType.Menu));
            });
        }
Exemple #4
0
        /// <summary>
        /// Initialize Intro level
        /// </summary>
        private void InitGame()
        {
            playButton.onClick.AddListener(() =>
            {
                StartCoroutine(sceneService.LoadSceneAsync(nextSceneType));
            });

            settingsButton.onClick.AddListener(() =>
            {
                canvasSwitcher.DelayedOpenTable(canvasDisabler);
            });

#if PLATFORM_ANDROID
            quitButton.onClick.AddListener(Application.Quit);
#endif
        }