Пример #1
0
        /// <summary>
        /// 切换场景
        /// </summary>
        /// <param name="sceneType">指定的场景类名</param>
        /// <param name="curtain">指定的帷幕</param>
        /// <param name="args">初始化参数</param>
        public void SwitchScene(string sceneType, ISceneCurtain curtain, params object[] args)
        {
            Type type = Type.GetType(sceneType);

            if (type == null)
            {
                throw new Exception(string.Format("Can not found scene class {0}", sceneType));
            }
            SwitchScene(type, curtain, args);
        }
Пример #2
0
        /// <summary>
        /// 切换场景
        /// </summary>
        /// <param name="type">指定的场景类型</param>
        /// <param name="curtain">指定的帷幕</param>
        /// <param name="args">初始化参数</param>
        public void SwitchScene(Type type, ISceneCurtain curtain, params object[] args)
        {
            if (m_RunningCoroutine != null)
            {
                throw new Exception("The last operation is still in progress !");
            }
            BaseScene nextScene = null;

            foreach (var scene in m_Scenes)
            {
                if (scene.GetType() == type)
                {
                    nextScene = scene;
                    break;
                }
            }
            if (nextScene == null)
            {
                nextScene = (BaseScene)Activator.CreateInstance(type);
            }
            m_IsDestroyingScene = true;
            m_RunningCoroutine  = new Coroutine(SwitchScene(CurrentScene, nextScene, curtain == null ? m_DefaultCurtain : curtain, args));
        }
Пример #3
0
        IEnumerator SwitchScene(BaseScene origScene, BaseScene nextScene, ISceneCurtain curtain, params object[] args)
        {
            if (origScene == nextScene)
            {
                m_IsDestroyingScene = false;
                yield break;
            }
            //落幕
            if (curtain != null)
            {
                yield return(curtain.Falls());
            }
            //关闭现有界面
            UIManager uiManager = GameFramework.GetModule <UIManager>();

            if (uiManager != null)
            {
                uiManager.CloseAll();
            }
            //卸载旧场景
            if (origScene != null)
            {
                yield return(InvokeExit(origScene));
            }
            //加载新场景
            yield return(ResourceManager.Instance.LoadSceneAsync(GetURL(nextScene)));

            m_IsDestroyingScene = false;
            yield return(InvokeEnter(nextScene, args));

            CurrentScene = nextScene;
            //揭幕
            if (curtain != null)
            {
                yield return(curtain.Raise());
            }
        }
Пример #4
0
 /// <summary>
 /// 设置默认帷幕
 /// </summary>
 /// <param name="curtain"></param>
 public void SetDefaultSceneCurtain(ISceneCurtain curtain)
 {
     m_DefaultCurtain = curtain;
 }
Пример #5
0
        /// <summary>
        /// 切换场景
        /// </summary>
        /// <typeparam name="T">指定的场景类型</typeparam>
        /// <param name="curtain">指定的帷幕</param>
        /// <param name="args">初始化参数</param>
        public void SwitchScene <T>(ISceneCurtain curtain, params object[] args) where T : BaseScene
        {
            Type type = typeof(T);

            SwitchScene(type, curtain, args);
        }