Пример #1
0
        /// <summary>
        /// 指定アンカーまでシーンポップ.
        /// </summary>
        /// <param name="anchorName">ポップ先のアンカー名.</param>
        /// <param name="fadeParam">フェードパラメータ.</param>
        public void PopSceneToAnchor(string anchorName, SceneChangeFadeParam fadeParam, AfterSceneControlDelegate afterSceneControlDelegate = null)
        {
            // フェードアウト開始
            isFadeWaiting = true;

            // 指定アンカーが見つかったかどうかのフラグ
            bool bFound = false;

            // 指定アンカーを探す
            foreach (KeyValuePair <string, int> pair in sceneAnchor)
            {
                // 見つかったらシーンポップ開始
                if (pair.Key == anchorName)
                {
                    CmnFadeManager.Inst.StartFadeOut(EndFadeOutCallBack, fadeParam.fadeOutTime, fadeParam.fadeType, fadeParam.fadeColor);
                    StartCoroutine(PopSceneToAnchorInternal(anchorName, fadeParam, afterSceneControlDelegate));
                    bFound = true;
                    break;
                }
            }
            // アンカーが無ければ警告出して無視
            if (bFound == false)
            {
                Logger.Warn("Anchor not found.:" + anchorName);
            }
        }
Пример #2
0
        /// <summary>
        /// シーン変更のコルーチン
        /// </summary>
        /// <param name="SceneName">シーン名</param>
        /// <param name="fadeParam">フェードパラメータ</param>
        IEnumerator ChangeSceneInternal(string SceneName, SceneChangeFadeParam fadeParam, AfterSceneControlDelegate afterSceneControlDelegate)
        {
            // フェードアウトが完了するまで待機
            while (isFadeWaiting)
            {
                yield return(null);
            }

            // ロード画面のUI表示(表示のために1フレーム待機)
            LoadingUIManager.Inst.ShowLoadingUI(fadeParam.loadingType);
            yield return(null);

            // シーンの遷移ヒストリが登録されているなら
            if (sceneHistory.Count > 0)
            {
                // シーンの遷移ヒストリから一番先頭を削除してから、登録
                sceneHistory.Pop();
                sceneHistory.Push(SceneName);

                // シーンのアクティブ状態を変更
                yield return(StartCoroutine(ChangeSceneActivation(SceneName)));
            }

            // シーン切り替え後のクリーンアップ
            CleaneUpAfterChangeSceneActivation(fadeParam, afterSceneControlDelegate);
        }
Пример #3
0
        /// <summary>
        /// シーンポップ.
        /// </summary>
        /// <param name="fadeTime">フェードパラメータ.</param>
        public void PopScene(SceneChangeFadeParam fadeParam, AfterSceneControlDelegate afterSceneControlDelegate = null)
        {
            // フェードアウト開始
            isFadeWaiting = true;
            CmnFadeManager.Inst.StartFadeOut(EndFadeOutCallBack, fadeParam.fadeOutTime, fadeParam.fadeType, fadeParam.fadeColor);

            // シーンポップ開始
            StartCoroutine(PopSceneInternal(fadeParam, afterSceneControlDelegate));
        }
Пример #4
0
        /*
         * TODO
         *
         * ・特定のシーンをソフトリセット
         *      (StartとInitを呼ぶ。Awakeも呼びたい)
         *
         * ・特定のシーンをハードリセット
         *      (Static以外の値や座標を強制リセット。ソフトより安定するが少し遅い)
         *
         * ・LoadLevelを呼び出してシーンを綺麗にしてもらう
         *      (これで管理するのが一番楽)
         *
         * ・特定のシーンを破棄してメモリを確保
         *
         * ・メモリ不足した時に通知(ios/Androidのみ)
         *      (この時、アクティブでないキャッシュ済シーンを全て破棄してメモリを確保)
         *
         * ・ゲームをポーズした時にアクティブでないキャッシュ済シーンを破棄してメモリを確保
         *      (バックグラウンドに回った時に落とされる対策)
         */

        /// <summary>
        /// シーンプッシュ.
        /// </summary>
        /// <param name="SceneName">シーン名.</param>
        /// <param name="fadeTime">フェードパラメータ.</param>
        /// <param name="pushAnchor">シーンまでのアンカー.</param>
        public void PushScene(string SceneName, SceneChangeFadeParam fadeParam, AfterSceneControlDelegate afterSceneControlDelegate = null, string pushAnchor = null)
        {
            // フェードアウト開始
            isFadeWaiting = true;
            CmnFadeManager.Inst.StartFadeOut(EndFadeOutCallBack, fadeParam.fadeOutTime, fadeParam.fadeType, fadeParam.fadeColor);

            // シーンプッシュ開始
            StartCoroutine(PushSceneInternal(SceneName, fadeParam, afterSceneControlDelegate, pushAnchor));
        }
Пример #5
0
        /// <summary>
        /// シーン切り替え後のクリーンアップ(フェードイン等).
        /// </summary>
        void CleaneUpAfterChangeSceneActivation(SceneChangeFadeParam fadeParam, AfterSceneControlDelegate afterSceneControlDelegate)
        {
            // ロード画面のテキストを隠してフェードイン
            LoadingUIManager.Inst.HideLoadingUI(fadeParam.loadingType);
            CmnFadeManager.Inst.StartFadeIn(EndFadeInCallBack, fadeParam.fadeInTime, fadeParam.fadeType, fadeParam.fadeColor);

            // シーンUIとタイトルの切り替え
            sceneUI.ChangeCommonSceneUI(currentSceneRoot.SceneUiParam, currentSceneRoot.SceneBgKind);
            sceneUI.ChangeSceneTitleLabel(currentSceneRoot.SceneNameLocalizeID);

            if (afterSceneControlDelegate != null)
            {
                afterSceneControlDelegate();
            }
        }
Пример #6
0
        /// <summary>
        /// シーンプッシュのコルーチン
        /// </summary>
        /// <param name="SceneName">シーン名</param>
        /// <param name="fadeParam">フェードパラメータ</param>
        /// <param name="pushAnchor">シーンまでのアンカー</param>
        IEnumerator PushSceneInternal(string SceneName, SceneChangeFadeParam fadeParam, AfterSceneControlDelegate afterSceneControlDelegate, string pushAnchor)
        {
            // フェードアウトが完了するまで待機
            while (isFadeWaiting)
            {
                yield return(null);
            }

            // ロード画面のUI表示(表示のために1フレーム待機)
            LoadingUIManager.Inst.ShowLoadingUI(fadeParam.loadingType);
            yield return(null);

            // シーンのアクティブ状態を変更
            yield return(StartCoroutine(ChangeSceneActivation(SceneName)));

            // シーンの遷移ヒストリに登録
            sceneHistory.Push(SceneName);

            Debug.Log(pushAnchor);
            // シーンまでのアンカーの登録
            if (pushAnchor != null)
            {
                // シーンまでのアンカーが見つかったかどうかのフラグ
                bool find = false;

                // シーンまでのアンカーを探す
                foreach (KeyValuePair <string, int> pair in sceneAnchor)
                {
                    if (pair.Key == pushAnchor)
                    {
                        find = true;
                        break;
                    }
                }
                // 見つからなかったらアンカーを登録、同じものがz見つかったらエラー
                if (find == false)
                {
                    sceneAnchor.Push(new KeyValuePair <string, int>(pushAnchor, sceneHistory.Count - 1));
                }
                else
                {
                    Logger.Error("same name anchor found");
                }
            }

            // シーン切り替え後のクリーンアップ
            CleaneUpAfterChangeSceneActivation(fadeParam, afterSceneControlDelegate);
        }
Пример #7
0
        /// <summary>
        /// 指定アンカーまでシーンポップのコルーチン
        /// </summary>
        /// <param name="anchorName">ポップ先のアンカー名</param>
        /// <param name="fadeParam">フェードパラメータ</param>
        IEnumerator PopSceneToAnchorInternal(string anchorName, SceneChangeFadeParam fadeParam, AfterSceneControlDelegate afterSceneControlDelegate)
        {
            // フェードアウトが完了するまで待機
            while (isFadeWaiting)
            {
                yield return(null);
            }

            // ロード画面のUI表示(表示のために1フレーム待機)
            LoadingUIManager.Inst.ShowLoadingUI(fadeParam.loadingType);
            yield return(null);

            // 同名アンカー
            int popAnchorCount = -1;

            // 同名アンカー探す
            foreach (KeyValuePair <string, int> pair in sceneAnchor)
            {
                if (pair.Key == anchorName)
                {
                    popAnchorCount = pair.Value;
                    break;
                }
            }

            // 同名アンカーが見つかったらそこまでポップ
            if (popAnchorCount >= 0)
            {
                while (sceneHistory.Count - 1 > popAnchorCount)
                {
                    sceneHistory.Pop();
                }
                string nextSceneName = sceneHistory.Peek();
                yield return(StartCoroutine(ChangeSceneActivation(nextSceneName)));
            }
            // 見つからなかったらエラー
            else
            {
                Logger.Error("invalid anchor name:" + anchorName);
            }

            // シーン切り替え後のクリーンアップ
            CleaneUpAfterChangeSceneActivation(fadeParam, afterSceneControlDelegate);
        }
Пример #8
0
        IEnumerator SceneStartColutine()
        {
            // 共通シーンUIとフェードのパラメータの初期設定
            sceneUI = CommonSceneUI.Inst;
            SceneChangeFadeParam noTimeFade = new SceneChangeFadeParam(0, 0, CmnFadeManager.FadeType.FADE_TIMEONLY, new Color(0, 0, 0, 0), LibBridgeInfo.LoadingType.COMMON);

            // 準備が整うまでシーン開始は遅延.
            yield return(LibBridgeInfo.WaitForEndOfFrame);

            yield return(LibBridgeInfo.WaitForEndOfFrame);

            // 準備が整ったらシーン変更
            if (!isDebug)
            {
                PushScene(firstSceneName, noTimeFade);
            }
            else
            {
                // デバッグの場合はデバッグシーンをアンカーとして埋め込んでおく.
                PushScene(debugFirstSceneName, noTimeFade, null, debugFirstSceneName);
            }
        }