画面移動時のエフェクト
Scene間の移動はできましたが、画面が急に切り替わるので少し唐突な印象を受けます。最後に、画面をフェードアウトさせてからシーンを変更する処理を追加しましょう。
フェードアウト用のGameObjectを追加
今回は既存の画像floorをフェードアウトに利用します。ProjectウィンドウのImagesフォルダのfloorをHierarchyウィンドウに追加し、名前をfadeOutに変更します。
InspectorウィンドウのScaleの値を変更します。Xを50、Yを50にします。
透明度を変更する
画面のフェードアウトはGameObjectの透明度を0(透明)から、だんだんと1(不透明)に近づけることで実現します。
まずはGameObjectの透明度を0に変更します。InspectorウィンドウのColorプロパティの中央の白い長方形をクリックします。Colorウィンドウがポップアップするのでウィンドウ下、Aの値を0に変更します。値は透明が0で、不透明が255です。
プログラムを修正
まずは以下の変数を用意します。
// フェードアウト制御用 private GameObject _fadeOut; // クリアしたかどうか private bool _clearFlag = false;
フェードアウトするためのGameObjectを格納する変数と、クリアしたという状態を管理するフラグ変数を用意します。
初期化時にGameObjectを取得します。
void Start () { this._animator = this.GetComponent<Animator>(); this._isLeftMove = true; this._isJumping = false; this._isStop = true; // フェードアウト用のGameObjectを取得 this._fadeOut = GameObject.Find("fadeOut"); }
実際に必要になった際にGameObjectを取得しても構いませんが、何度も呼び出す処理なので使いまわせるようにStartメソッド時に取得しておきます。
OnCollisionEnter2Dメソッド内でシーン切り替えしていた部分を、以下のようにフラグを変更する処理に書き替えます。
// 2面に移動(フェードアウト処理開始) if (Application.loadedLevelName == "gameScene") { this._clearFlag = true; }
Updateメソッドの末尾に以下のコードを追加します。
var a = this._fadeOut.GetComponent<SpriteRenderer>().color.a; if (this._clearFlag == true) { if (a < 1f) { a += 0.01f; this._fadeOut.GetComponent<SpriteRenderer>().color = new Color(1, 1, 1, a); } else { Application.LoadLevel("gameScene002"); } }
fadeOutの透明度をチェックして1f(不透明)以下ならさらに透明度を上げ、1fに達した場合にシーンを移動します。1fはfloat型の1という意味です。ここでは不透明な状態を意味します。
デバッグ実行すると、ハムスターに触れた際に画面がフェードアウトした後、次のシーンに移動することが確認できます。
まとめ
今回は複数のSceneを移動する方法を紹介しました。Sceneの変更はApplication.LoadLevelメソッドを用いましたが、Applicationクラスからはそれ以外にも色々な情報が取得できますので覚えておくと良いでしょう。