/// <summary>
        /// シーン遷移を実行する
        /// </summary>
        /// <param name="nextScene">次のシーン</param>
        /// <param name="data">次のシーンへ引き継ぐデータ</param>
        /// <param name="additiveLoadScenes">追加ロードするシーン</param>
        public async Task Move(GameScenes nextScene,
                               SceneDataPack data,
                               GameScenes[] additiveLoadScenes)
        {
            SceneLoader.PreviousSceneData = data;
            CurrentGameScene = nextScene;

            //画面をトランジションエフェクトで隠す
            await _transitionImageController.CloseTransition();

            //シーン遷移
            await SceneManager.LoadSceneAsync(nextScene.ToString(), LoadSceneMode.Single);

            //追加シーンがある場合は一緒に読み込む
            if (additiveLoadScenes != null)
            {
                await Task.WhenAll(additiveLoadScenes.Select(scene =>
                                                             SceneManager.LoadSceneAsync(scene.ToString(), LoadSceneMode.Additive).AsObservable().ToTask()));
            }

            // 未使用アセットすべて開放
            await Resources.UnloadUnusedAssets();

            // GC実行
            GC.Collect();

            // 画面を戻す
            await _transitionImageController.OpenTransition();
        }
Exemple #2
0
 /// <summary>
 /// シーン遷移を行う
 /// </summary>
 /// <param name="scene">次のシーン</param>
 /// <param name="data">次のシーンへ引き継ぐデータ</param>
 /// <param name="additiveLoadScenes">追加でロードするシーン</param>
 public static async Task MoveScene(GameScenes scene,
                                    SceneDataPack data = null,
                                    GameScenes[] additiveLoadScenes = null)
 {
     if (data == null)
     {
         data = new DefaultSceneDataPack(SceneLoadManager.CurrentGameScene, additiveLoadScenes);
     }
     await SceneLoadManager.Move(scene, data, additiveLoadScenes);
 }