シーン遷移の前後で FadeCanvas ゲームオブジェクトの制御を行い、フェード機能を実行するための機能を持つスクリプトを作成します。
このスクリプトは、FadeCanvas ゲームオブジェクトにアタッチします。
いずれのスクリプトからでもアクセスしやすいように、シングルトンクラスとして作成します。
また、シーン遷移を行った際にも FadeCanvas ゲームオブジェクトが破壊されないようにするため、DontDestroyOnLoad メソッドも記述しています。
FadeCanvas ゲームオブジェクトがシーン遷移によって破壊されてしまうと、フェードアウトが機能しなくなるためです。
TransitionManager.cs
<= クリックすると開きます
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TransitionManager : MonoBehaviour {
public static TransitionManager instance;
[SerializeField]
private Fade fade;
[SerializeField]
private FadeImage fadeImage;
void Awake() {
if (instance == null) {
instance = this;
DontDestroyOnLoad(gameObject);
} else {
Destroy(gameObject);
}
}
/// <summary>
/// フェードイン & フェードアウト
/// </summary>
/// <param name="duration"></param>
public void FadeInAndFadeOut(float duration) {
fade.FadeIn(duration, () => {
fade.FadeOut(2.0f);
});
Debug.Log("Fade_Opening");
}
/// <summary>
/// フェードアウト
/// </summary>
/// <param name="duration"></param>
public void FadeOut(float duration) {
fade.FadeOut(2.0f);
Debug.Log("FadeOut_Start");
}
/// <summary>
/// フェードインの後に次のシーンの読み込み
/// </summary>
/// <param name="duration"></param>
/// <param name="nextSceneName"></param>
public void FadeNextScene(float duration, SceneName nextSceneName) {
fade.FadeIn(duration, () => {
// フェードイン後に次のシーンの読み込み
SceneStateManager.instance.PrepareChangeScene(nextSceneName);
});
Debug.Log("FadeIn_Start");
}
}
スクリプトを作成したら、セーブを行います。