Example #1
0
 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();
    }