/// <summary> /// シーン切り替え処理 /// </summary> /// <returns></returns> IEnumerator SceneChange() { isBooting = false; // シーンを非アクティブで読み込み開始 string sceneName = NextScene.ToString(); if (NextScene == SceneType.Game) { sceneName = $"Stage{GameParams.SelectedStage+1}"; } loadingSceneOperations[loadingSceneOperationCount] = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); loadingSceneOperations[loadingSceneOperationCount].allowSceneActivation = false; loadingSceneOperationCount++; // フェードアウト yield return(Fade.StartFade(Fade.FadeStateType.Out, fadeTime, true)); // 不要になったシーンを解放する if (loadedSceneName.Length > 0) { unloadSceneOperations[unloadSceneCount] = SceneManager.UnloadSceneAsync(loadedSceneName); unloadSceneCount++; } loadedSceneName = sceneName; // シーン切り替え NowScene = NextScene; NextScene = SceneType.None; // シーンをアクティブにする loadingSceneOperations[0].allowSceneActivation = true; // シーンの読み込みと解放の完了を待つ for (int i = 0; i < loadingSceneOperationCount; i++) { if (!loadingSceneOperations[i].isDone) { yield return(loadingSceneOperations[i]); } } for (int i = 0; i < unloadSceneCount; i++) { if (!unloadSceneOperations[i].isDone) { yield return(unloadSceneOperations[i]); } } // シーンの初期化を待つ while (loadingSceneManagerCount < loadingSceneOperationCount) { yield return(null); } // フェードアウト完了処理を呼び出す for (int i = 0; i < loadingSceneManagerCount; i++) { loadingSceneManagers[i].OnFadeOutDone(); } // カメラ切り替え if (Camera.main != null) { SetMainCamera(Camera.main); } else { SetSubCamera(); } // フェードイン yield return(Fade.StartFade(Fade.FadeStateType.In, fadeTime)); // フェードイン完了処理を呼び出す for (int i = 0; i < loadingSceneManagerCount; i++) { loadingSceneManagers[i].OnFadeInDone(); } // シーン切り替え完了 loadingSceneOperationCount = 0; loadingSceneManagerCount = 0; unloadSceneCount = 0; IsChanging = false; enabled = false; }
/// <summary> /// シーン切り替え処理 /// </summary> /// <returns></returns> IEnumerator SceneChange() { // シーンを非アクティブで読み込み開始 loadingSceneOperations[loadingSceneOperationCount] = SceneManager.LoadSceneAsync(NextScene.ToString(), LoadSceneMode.Additive); loadingSceneOperations[loadingSceneOperationCount].allowSceneActivation = false; loadingSceneOperationCount++; // フェードアウト yield return(Fade.StartFade(Fade.FadeStateType.Out, fadeTime, true)); // 不要になったシーンを解放する if (NowScene != SceneType.None) { unloadSceneOperations[unloadSceneCount] = SceneManager.UnloadSceneAsync(NowScene.ToString()); unloadSceneCount++; } // シーン切り替え NowScene = NextScene; NextScene = SceneType.None; // シーンをアクティブにする loadingSceneOperations[0].allowSceneActivation = true; // シーンの読み込みと解放の完了を待つ for (int i = 0; i < loadingSceneOperationCount; i++) { if (!loadingSceneOperations[i].isDone) { yield return(loadingSceneOperations[i]); } } for (int i = 0; i < unloadSceneCount; i++) { if (!unloadSceneOperations[i].isDone) { yield return(unloadSceneOperations[i]); } } // シーンの初期化を待つ while (loadingSceneManagerCount < loadingSceneOperationCount) { yield return(null); } // フェードアウト完了処理を呼び出す for (int i = 0; i < loadingSceneManagerCount; i++) { loadingSceneManagers[i].OnFadeOutDone(); } // フェードイン yield return(Fade.StartFade(Fade.FadeStateType.In, fadeTime)); // フェードイン完了処理を呼び出す for (int i = 0; i < loadingSceneManagerCount; i++) { loadingSceneManagers[i].OnFadeInDone(); } // シーン切り替え完了 loadingSceneOperationCount = 0; loadingSceneManagerCount = 0; unloadSceneCount = 0; IsChanging = false; isBooting = false; enabled = false; }