/// <summary> /// シーン遷移を実行する /// </summary> /// <param name="nextScene">次のシーン</param> /// <param name="data">次のシーンへ引き継ぐデータ</param> /// <param name="additiveLoadScenes">追加ロードするシーン</param> /// <param name="autoMove">トランジションの自動遷移を行うか</param> public void StartTransaction(GameScenes nextScene, SceneDataPack data, GameScenes[] additiveLoadScenes, bool autoMove ) { StartCoroutine(TransitionCoroutine(nextScene, data, additiveLoadScenes, autoMove)); }
private IEnumerator TransitionCoroutine( GameScenes nextScene, SceneDataPack data, GameScenes[] additiveLoadScenes, bool autoMove ) { ToMoveFlag.Value = autoMove; _isTransitioning.Value = true; while (transitionComponent == null) { yield return(new WaitForSeconds(0.2f)); transitionComponent.threshold = 0; } //タッチイベントを吸収させる image.raycastTarget = true; transitionComponent.flip = false; transitionComponent.Play(); yield return(onTransactionFinishedInternal.FirstOrDefault().StartAsCoroutine()); transitionComponent.threshold = 1; SceneLoader.PreviousSceneData = data; //シーン遷移 yield return(SceneManager.LoadSceneAsync(nextScene.ToString(), LoadSceneMode.Single)); //追加シーンがある場合は一緒に読み込む if (additiveLoadScenes != null) { yield return(additiveLoadScenes.Select(scene => SceneManager.LoadSceneAsync(scene.ToString(), LoadSceneMode.Additive) .ObserveEveryValueChanged(x => x.isDone) .FirstOrDefault(x => x) ).WhenAll().StartAsCoroutine()); } Resources.UnloadUnusedAssets(); GC.Collect(); onAllSceneLoaded.OnNext(Unit.Default); if (!autoMove) { //自動遷移しないなら待機 yield return(ToMoveFlag.FirstOrDefault(x => x).StartAsCoroutine()); } ToMoveFlag.Value = false; //反転 transitionComponent.Play(); yield return(onTransactionFinishedInternal.FirstOrDefault().StartAsCoroutine()); image.raycastTarget = false; transitionComponent.threshold = 0; onTransitionAnimationFinishedSubject.OnNext(Unit.Default); _isTransitioning.Value = false; }
/// <summary> /// シーン遷移を行う /// </summary> /// <param name="scene">次のシーン</param> /// <param name="data">次のシーンへ引き継ぐデータ</param> /// <param name="additiveLoadScenes">追加でロードするシーン</param> /// <param name="autoMove">トランジションアニメーションを自動的に完了させるか /// falseの場合はOpen()を実行しないとトランジションが終了しない</param> public static void LoadScene(GameScenes scene, SceneDataPack data = null, GameScenes[] additiveLoadScenes = null, bool autoMove = true) { if (data == null) { data = new DefaultSceneDataPack(TransitionManager.CurrentGameScene); } TransitionManager.StartTransaction(scene, data, additiveLoadScenes, autoMove); }