private IEnumerator Chang(EF_Scenes go2Scene) { int index = (int)go2Scene; // 如 0 -> 初始化 1 ->开始场景 2 -> 游戏 if (index > 1) // 2开始的才需要删除之前的啊 { foreach (BaseUI ui in l_BaseUI) { EF_Scenes uiScene = ui.GetSceneType(); // 这个UI的场景 if (uiScene != go2Scene) // 不是这个场景都删除 { ui.Destroy(); yield return(0); } } } foreach (BaseUI ui in l_BaseUI) { EF_Scenes uiScene = ui.GetSceneType(); if (uiScene == go2Scene) // 只要是这个场景的都预先加载好 { ui.PreLoad(); yield return(0); } yield return(0); } }
public IEnumerator ChangScene(EF_Scenes scene) // 切换场景都调用下这个 { if (scene == EF_Scenes._0_Main) { MyLog.Red("写错了吧,切换成初始化场景?"); yield break; } yield return(Chang(scene)); }
} // 是否播放动画中 public void LoadScene(EF_Scenes scene) // 加载场景只需要告诉我加载那个场景即可,详细的参数都在对应的类中 { if (scene == EF_Scenes._0_Main) { MyLog.Red("去初始化场景?"); return; } if (mCurrentScene == scene) { MyLog.Red("怎么加载回当前场景?"); return; } IsAniming = true; if (null != mSceneBean) // 1 .先让原来的离开 { mSceneBean.Enter(); } // 2. 生成要加载的场景参数 AssemblyName assemblyName = Assembly.GetExecutingAssembly().GetName(); mSceneBean = (ISceneBean)Assembly.Load(assemblyName).CreateInstance(scene.ToString()); if (null == mSceneBean) { throw new Exception("场景的类没有写? "); } mCurrentScene = scene; EF_JumpSceneAnim[] anims = mSceneBean.GetJumpAnim(); EF_JumpSceneAnim anim; if (null != anims && anims.Length > 0) // 要指定的动画集合 { int randomIndex = Random.Range(0, anims.Length); anim = anims[randomIndex]; } else // 没有指定就随机一个 { Array array = Enum.GetValues(typeof(EF_JumpSceneAnim)); anim = (EF_JumpSceneAnim)array.GetValue(Random.Range(0, array.Length)); } // 3. 开始协程来加载需要用动画的情况 StartCoroutine(StartLoadScene(anim)); }
private void E_OnEnterStart(EF_Scenes scene) // 接收到 LOGO 结束了 { isLogo = false; MyEventCenter.RemoveListener <EF_Scenes>(E_GameEvent.RealJumpIntoScene, E_OnEnterStart); }