public void PopTill(Type sceneType, bool destroy = false, bool include = false) { while (_stack.Count > 1) { var scene = pop(false); if (scene != null) { if (scene.GetType() == sceneType) { if (!include) { push(scene, false); } else { SceneBase.Destroy(scene); } break; } else { SceneBase.Destroy(scene); } } } SwitchScenesActivity(); }
protected IEnumerator SceneLoadCorountine(GameObject sceneObj) { bool isFade = true; StartCoroutine(FadeScene.Instance.FadeOut(() => isFade = false)); while (isFade) { yield return(null); } if (NowScene != null) { NowScene.Destroy(); } float elapsedTime = Time.time; NowScene = Instantiate(sceneObj, SceneRoot.transform).GetComponent <SceneBase>(); NowScene.Initilize(); yield return(StartCoroutine(NowScene.DoInitialize())); elapsedTime = Time.time - elapsedTime; // フェードアニメーションの間隔を最低限あける if (elapsedTime < FadeSpaceTime) { yield return(new WaitForSeconds(FadeSpaceTime - elapsedTime)); } StartCoroutine(FadeScene.Instance.FadeIn(() => isFade = false)); while (isFade) { yield return(null); } NowScene.OnCompleteInitialize(); }