Unityでゲームを作っていると、シーンの読み込み時にフェードイン、フェードアウトを多用する。
しかし、標準では備わっておらず、自分で探すか作るしかないのが現状だ。
そこで、導入が楽なように、単体動作するスクリプトを作ってみた。

ダウンロードはこちら→MyFade.zip

使い方は、解凍して出てきたMyFade.csをプロジェクトに放り込む。
あとはUnityのシーンロードと同じように、スクリプト上からメソッドを呼び出す。

呼び出し方は1行書くのみ。

MyFade.LoadLevel(シーン名orシーン番号);

Application.LoadLevelとほぼ同じイメージで使えるので分かり易いと思う。

すぐコピペで使いたい人はこちら。

using UnityEngine;

public class MyFade : MonoBehaviour {

	// 重複処理防止用.
	public static MyFade instance;

	// シーン名またはシーン番号.
	private string levelname;
	private int level;

	// シーン名での呼び出し.
	public static void LoadLevel(string level){
		if (instance == null){
			instance = new GameObject("MyFade").AddComponent<MyFade>();
			DontDestroyOnLoad(instance);
			instance.levelname = level;
		}
	}

	// シーン番号での呼び出し.
	public static void LoadLevel(int level){
		if (instance == null){
			instance = new GameObject("MyFade").AddComponent<MyFade>();
			DontDestroyOnLoad(instance);
			instance.level = level;
		}
	}

	// 内部処理用変数宣言.
	private Texture2D tex; // 白1pxテクスチャ用.
	private float alpha; // 透過処理用.
	private Rect rect; // 画面サイズ計測用.
	private bool loaded; //処理反転用(シーン読み込み完了後にTrue).

	// 変数の初期化.
	void Awake(){
		tex = Texture2D.whiteTexture;
		alpha = 0;
		rect = new Rect(0,0,Screen.width,Screen.height);
		loaded = false;
	}

	// 内部処理.
	void Update(){
		alpha += !loaded ? Time.deltaTime : -Time.deltaTime;

		if (alpha >= 1){
			if (levelname != "")
				Application.LoadLevel(levelname);
			else
				Application.LoadLevel(level);

			loaded = true;
		}

		if (loaded && alpha < 0)
			Destroy(gameObject);
	}

	// 描画.
	void OnGUI(){
		GUI.color = new Color(0,0,0,alpha);
		GUI.DrawTexture(rect,tex);
	}
}