SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

速習 Unity 2Dゲーム開発

速習 Unity 2Dゲーム開発
~第13回 シーンの移動処理

速習 Unity 2Dゲーム開発 第13回

  • X ポスト
  • このエントリーをはてなブックマークに追加

画面移動時のエフェクト

 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です。

透明度を0に
透明度を0に

プログラムを修正

 まずは以下の変数を用意します。

フェードアウト処理用
// フェードアウト制御用
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メソッド内でシーン切り替えしていた部分を、以下のようにフラグを変更する処理に書き替えます。

Scene変更処理をフラグ変更に置き換え
// 2面に移動(フェードアウト処理開始)
if (Application.loadedLevelName == "gameScene")
{
    this._clearFlag = true;
}

 Updateメソッドの末尾に以下のコードを追加します。

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クラスからはそれ以外にも色々な情報が取得できますので覚えておくと良いでしょう。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
速習 Unity 2Dゲーム開発連載記事一覧

もっと読む

この記事の著者

西村 誠(ニシムラ マコト)

 Microsoft MVP Windows Platform Development。 Flash、PHPの開発経験もあり国産ECサイト構築フレームワーク「EC-CUBE」の公式エバンジェリストでもある。 ブログ:眠るシーラカンスと水底のプログラマー 著書:基礎から学ぶ Windowsストアアプリ開発

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8399 2015/03/09 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング