예제 #1
0
 /// <summary>
 /// 立刻切换到目标场景
 /// </summary>
 /// <param name="TargetScene">目标场景</param>
 public void ChangeSceneImmediately(string SceneName)
 {
     try
     {
         CLOG.I("ready to load scene {0} immediate", SceneName);
         CompleteCallback = null;
         SceneManager.LoadScene(SceneName, LoadSceneMode.Single);
     }
     catch (Exception ex)
     {
         CLOG.E((ex.ToString()));
     }
 }
예제 #2
0
        /// <summary>
        /// 显示一个加载场景来加载场景
        /// 等加载完毕后切换到目标场景
        /// </summary>
        /// <param name="TargetScene">目标场景</param>
        /// <param name="LoadingClass">加载界面类</param>
        /// <param name="Callback">加载完毕的回调</param>
        public void ChangeScene(string SceneName, Type LoadingClass, DelegateSceneLoaded Callback = null)
        {
            //记录回调
            CompleteCallback = Callback;

            //加载并显示场景加载UI
            if (LoadingClass != null)
            {
                MethodInfo func = LoadingClass.GetMethod("CreateUI");
                CAssert.AssertIfNull(func);
                func.Invoke(null, null);
            }

            //开始加载
            StartCoroutine(LoadScene(SceneName, LoadingClass == null));
        }
예제 #3
0
        /// <summary>
        /// 异步加载场景
        /// </summary>
        /// <param name="SceneName">场景名</param>
        /// <param name="AutoSwitch">是否在加载完成自动切换到目标场景,如果切换场景使用了加载界面,那么一般需要等加载界面完成动画后再来切换,而没有使用加载界面的,可以自动切换场景</param>
        /// <returns></returns>
        IEnumerator LoadScene(string SceneName, bool AutoSwitch)
        {
            CLOG.I("ready to load scene {0} asyn", SceneName);
            m_AsyncOperator = SceneManager.LoadSceneAsync(SceneName);
            m_AsyncOperator.allowSceneActivation = AutoSwitch;
            yield return(m_AsyncOperator);

            if (CompleteCallback != null && m_AsyncOperator != null)
            {
                yield return(new WaitUntil(() => { return m_AsyncOperator.isDone; }));

                CLOG.I("scene {0} was load complete!", SceneName);
                CompleteCallback();
                m_AsyncOperator  = null;
                CompleteCallback = null;
            }
        }