20.トランジション機能を活用して、シーン遷移の処理の前後にフェードインとフェードアウトの処理を実装する
・アセットの活用
テラシュールブログ 様【Unity】Unityでトランジションを使用した綺麗な場面転換(uGUI対応版)https://tsubakit1.hateblo.jp/entry/2015/11/04/0153...
<= クリックすると開きます。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class SceneStateManager : MonoBehaviour { public static SceneStateManager instance; ////* ここから変数の宣言を2つ追加 *//// [SerializeField] private Fade fade; // FadeCanvas ゲームオブジェクトをアサインするための変数 [SerializeField, Header("フェードの時間")] private float fadeDuration = 1.0f; ////* ここまで *//// void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } } /// <summary> /// 引数で指定したシーンへのシーン遷移の準備 /// シーン遷移を実行する場合は、このメソッドを利用する /// </summary> /// <param name="nextSceneType"></param> public void PreparateNextScene(SceneType nextSceneType) { ////* ここから処理を修正する *//// // FadeCanvas の情報があるかないかを判断して、トランジションの機能を使うか、使わないかを切り替える if (!fade) { // FadeCanvas の情報がない場合、いままでと同じようにすぐにシーン遷移 StartCoroutine(LoadNextScene(nextSceneType)); } else { // FadeCanvas の情報がある場合、fadeDuration 変数秒の時間をかけてフェードインの処理を行ってから、引数で指定したシーンへ遷移 fade.FadeIn(fadeDuration, () => { StartCoroutine(LoadNextScene(nextSceneType)); }); } ////* ここまで *//// } /// <summary> /// 引数で指定したシーンへ遷移 /// </summary> /// <param name="nextLoadSceneName"></param> /// <returns></returns> private IEnumerator LoadNextScene(SceneType nextLoadSceneName) { // シーン名を指定する引数には、enum である SceneType の列挙子を、 ToString メソッドを使って string 型へキャストして利用 SceneManager.LoadScene(nextLoadSceneName.ToString()); ////* ここから処理を追加する *//// // フェードインしている場合には if (fade) { // 読み込んだ新しいシーンの情報を取得 Scene scene = SceneManager.GetSceneByName(nextLoadSceneName.ToString()); // シーンの読み込み終了を待つ yield return new WaitUntil(() => scene.isLoaded); // シーンの読み込み終了してからフェードアウトして、場面転換を完了する fade.FadeOut(fadeDuration); } ////* ここまで *//// } }