Пример #1
0
    /// <summary>
    /// シーンロード
    /// </summary>
    private static void LoadSceneAsync(SceneDataPackBase dataPack)
    {
        //Header非表示 ※次のシーンでも表示が続くなら非表示にしない方が良いか?
        SharedUI.Instance.HideHeader();

        //ロード開始
        SceneManager.LoadSceneAsync(dataPack.toSceneName).completed += (op) =>
        {
            //シーン取得
            currentSceneName = dataPack.toSceneName;
            currentScene     = SceneManager
                               .GetSceneByName(currentSceneName)
                               .GetRootGameObjects()
                               .Select(g => g.GetComponent <SceneBase>())
                               .First(s => s != null);

            if (IsAutoHideLoading)
            {
                //シーン移動アニメーション終了
                SharedUI.Instance.HideSceneChangeAnimation();
            }

            //ロード完了通知
            IsLoading = false;
            currentScene.OnSceneLoaded(dataPack);
        };
    }
Пример #2
0
 /// <summary>
 /// シーンロード完了時
 /// </summary>
 public override void OnSceneLoaded(SceneDataPackBase dataPack)
 {
     if (dataPack is ToBattleSceneDataPack)
     {
         var data = dataPack as ToBattleSceneDataPack;
         this.stageData = Masters.SingleStageDB.FindById(data.stageId);
     }
 }
Пример #3
0
 /// <summary>
 /// シーンロード完了時
 /// </summary>
 public override void OnSceneLoaded(SceneDataPackBase dataPack)
 {
     if (dataPack is ToShopSceneDataPack)
     {
         var data = dataPack as ToShopSceneDataPack;
         this.firstOpenPage = data.pageType;
     }
 }
Пример #4
0
    /// <summary>
    /// シーン切り替え
    /// </summary>
    public static void ChangeSceneAsync(string nextSceneName, SceneDataPackBase dataPack = null)
    {
        if (currentSceneName == nextSceneName)
        {
            return;
        }
        if (IsLoading)
        {
            return;
        }

        //ロード中フラグON
        IsLoading = true;

        //デフォルトは自動でロード中表示を消す
        IsAutoHideLoading = true;

        if (dataPack == null)
        {
            dataPack = new SceneDataPackBase();
        }
        dataPack.toSceneName = nextSceneName;

        if (string.IsNullOrEmpty(currentSceneName))
        {
            //場面転換アニメなし
            LoadSceneAsync(dataPack);
        }
        else
        {
            dataPack.fromSceneName = currentSceneName;

            //場面転換アニメあり
            SharedUI.Instance.ShowSceneChangeAnimation(() =>
            {
                //空シーンに遷移することで現在のシーンをアンロード
                SceneManager.LoadSceneAsync("Empty").completed += (op1) =>
                {
#if DEBUG && UNITY_EDITOR
                    //シーン消えたけどUnloadされてないアセット一覧をログ表示
                    foreach (var handle in AssetManager.handles)
                    {
                        Debug.LogFormat("未アンロード:{0}, referenceCount={1}", handle.path, handle.referenceCount);
                    }
#endif
                    //リソースアンロード
                    Resources.UnloadUnusedAssets().completed += (op2) =>
                    {
                        //GC整理
                        GC.Collect();
                        //次のシーンをロード
                        LoadSceneAsync(dataPack);
                    };
                };
            });
        }
    }
Пример #5
0
    /// <summary>
    /// シーン切り替え
    /// </summary>
    public static void ChangeSceneAsync(string nextSceneName, SceneDataPackBase dataPack = null)
    {
        if (currentSceneName == nextSceneName)
        {
            return;
        }
        if (IsLoading)
        {
            return;
        }

        //ロード中フラグON
        IsLoading = true;

        //デフォルトは自動でロード中表示を消す
        IsAutoHideLoading = true;

        if (dataPack == null)
        {
            dataPack = new SceneDataPackBase();
        }
        dataPack.toSceneName = nextSceneName;

        if (string.IsNullOrEmpty(currentSceneName))
        {
            //場面転換アニメなし
            LoadSceneAsync(dataPack);
        }
        else
        {
            dataPack.fromSceneName = currentSceneName;

            //場面転換アニメあり
            ShowSceneChangeAnimation(() =>
            {
                //空シーンに遷移することで現在のシーンをアンロード
                SceneManager.LoadSceneAsync("Empty").completed += (op1) =>
                {
                    //リソースアンロード
                    Resources.UnloadUnusedAssets().completed += (op2) =>
                    {
                        //GC整理
                        GC.Collect();
                        //次のシーンをロード
                        LoadSceneAsync(dataPack);
                    };
                };
            });
        }
    }
Пример #6
0
 /// <summary>
 /// ①Awake ②OnSceneLoaded ③Startの順で呼ばれます
 /// </summary>
 public virtual void OnSceneLoaded(SceneDataPackBase dataPack)
 {
 }
Пример #7
0
    /// <summary>
    /// 挑戦するのクリック時
    /// </summary>
    private void OnClickChallengeButton(MissionContent content)
    {
        switch ((Master.MissionData.MainType)content.server.missionTypeId)
        {
        case Master.MissionData.MainType.SingleGetSter:
        case Master.MissionData.MainType.SingleTotalStageClear:
        case Master.MissionData.MainType.SingleSelectStageClear:
            //シングルのステージ選択に遷移
            if (!HomeScene.isMaxPossession)
            {
                this.nextSceneName = "SingleStageSelect";
                this.dataPack      = null;
                this.dialog.Close();

                if (!this.isBattle)
                {
                    this.dialog.onClose += () => SceneChanger.ChangeSceneAsync("SingleStageSelect");
                }
            }
            else
            {
                HomeScene.OpenPresentBoxOverDialog();
            }
            break;

        case Master.MissionData.MainType.MultiGetCoin:
        case Master.MissionData.MainType.MultiConsumCoin:
        case Master.MissionData.MainType.MultiConsumTotalItem:
        case Master.MissionData.MainType.MultiConsumSelectItem:
        case Master.MissionData.MainType.MultiCatchTotalFish:
        case Master.MissionData.MainType.MultiCatchSelectFish:
        case Master.MissionData.MainType.MultiGetRyugyoku:
        case Master.MissionData.MainType.MultiPlaySlot:
        case Master.MissionData.MainType.MultiGetJP:
        case Master.MissionData.MainType.MultiPlayFVAttack:
            //マルチのステージ選択に遷移
            if (!HomeScene.isMaxPossession)
            {
                this.nextSceneName = "MultiStageSelect";
                this.dataPack      = null;
                this.dialog.Close();

                if (!this.isBattle)
                {
                    this.dialog.onClose += () => SceneChanger.ChangeSceneAsync("MultiStageSelect");
                }
            }
            else
            {
                HomeScene.OpenPresentBoxOverDialog();
            }
            break;

        case Master.MissionData.MainType.DecompositionGear:
            this.nextSceneName = "ItemInventory";
            this.dataPack      = null;
            this.dialog.Close();

            if (!isBattle)
            {
                this.dialog.onClose += () => SceneChanger.ChangeSceneAsync("ItemInventory");
            }
            break;

        case Master.MissionData.MainType.ReachLevel:
        case Master.MissionData.MainType.LoginTotal:
        case Master.MissionData.MainType.LoginSelect:
        case Master.MissionData.MainType.LinkedAccount:
            //HOMEに遷移
            this.nextSceneName = "Home";
            this.dataPack      = null;
            this.dialog.Close();
            break;

        case Master.MissionData.MainType.GetTotalGear:
        case Master.MissionData.MainType.GetBatteryGear:
        case Master.MissionData.MainType.GetBarrelGear:
        case Master.MissionData.MainType.GetBulletGear:
        case Master.MissionData.MainType.GetTypesBattery:
            //ショップ(砲台関連のタブ)
            if (!HomeScene.isMaxPossession)
            {
                this.nextSceneName = "Shop";
                this.dataPack      = new ToShopSceneDataPack {
                    pageType = ShopScene.PageType.ToolGroup
                };
                this.dialog.Close();

                if (!this.isBattle)
                {
                    this.dialog.onClose += () => SceneChanger.ChangeSceneAsync("Shop", this.dataPack);
                }
            }
            else
            {
                HomeScene.OpenPresentBoxOverDialog();
            }
            break;

        case Master.MissionData.MainType.ReachVIPRank:
            //ショップ(ジェムのタブ)
            if (!HomeScene.isMaxPossession)
            {
                this.nextSceneName = "Shop";
                this.dataPack      = new ToShopSceneDataPack {
                    pageType = ShopScene.PageType.Gem
                };
                this.dialog.Close();

                if (!isBattle)
                {
                    this.dialog.onClose += () => SceneChanger.ChangeSceneAsync("Shop", this.dataPack);
                }
            }
            else
            {
                HomeScene.OpenPresentBoxOverDialog();
            }
            break;
        }
    }