IEnumerator SwitchSene(SceneComponent sceneExit, SceneComponent sceneEnter) { if (sceneExit != null) { bool closed = false; UnityEngine.Events.UnityAction wait = () => { closed = true; }; transitionScreen.OnTransitionComplete.AddListener(wait); //シーンの終了処理を行う sceneExit.ExitScne(); //画面をフェードアウトさせる transitionScreen.Close(sceneExit.FadeoutColor, sceneExit.FadeoutDuration); //フェード完了までまつ while (!closed) { yield return(null); } transitionScreen.OnTransitionComplete.RemoveListener(wait); //フェード完了後処理をする sceneExit.OnCompleteExit(); sceneExit.gameObject.SetActive(false); } if (sceneEnter != null) { bool closed = true; UnityEngine.Events.UnityAction wait = () => { closed = false; }; sceneEnter.gameObject.SetActive(true); transitionScreen.OnTransitionComplete.AddListener(wait); //シーンの開始処理をする sceneEnter.EntertScene(); //画面をフェードインさせる transitionScreen.Open(sceneEnter.FadeinColor, sceneEnter.FadeinDuration); //フェードインをまつ while (closed) { yield return(null); } transitionScreen.OnTransitionComplete.RemoveListener(wait); } }