TomoGのごちゃまぜ倉庫

Unityでフェードイン・フェードアウト

今回はUnityでフェードイン・アウトを行う方法について書きます。Unityで画面遷移するとき、何もカスタマイズしないと素っ気ないシーン間の遷移です。
そのシーン間の遷移のカスタマイズ方法として、一番先に思い浮かぶのは、フェードイン・フェードアウトではないでしょうか。

本記事では、そのUnityでフェードイン・フェードアウトを行う方法についてご紹介していきます。

まずは、どのように動くのか御覧下さい。
このようにフェードイン・フェードアウトが動いています。
画面内のUIがしょぼいのは適当に配置しただけでご容赦を・・・

ソースコード

<注>
・シーン間をまたいでいるため、シーン依存でないオブジェクトにスクリプトをアタッチする必要があります。
そのシーン間をまたぐオブジェクトを今からご説明していきます。

ゲームマネージャーの遷移

Unityのシーン全体を管理する者(マネージャー)とすると
このマネージャーのフローは以下のようになります
f:id:TomoG:20180806151842p:plain
MainWindowはTitleのことです(命名は気にしないでください・・・)
最初のManageScene時に作ったマネージャーをゲーム全体のマネージャーとしています。

フロー説明

ManagerScene

ゲームを起動したら、まずManageSceneに移ります。
このシーンはゲーム全てに使用するオブジェクト・変数を定義します。
例)BGMの音量・Audioオブジェクト
これは以下のサイトを参考にしました。
kan-kikuchi.hatenablog.com


このManageSceneで作られるGameManagerというオブジェクトでゲーム全体を統括します。
フェードイン・アウトはを行うスクリプトはこのオブジェクトにアタッチします。

このGameManagerというオブジェクトは、シーン間移動をしても破棄されないよう設定しているため、全てのシーンに存在することになります。

ManageScene自体はGameManagerオブジェクトを作成したらMainWindowにシーン遷移するようになっています。
そしてMainWindowに遷移した後は下図のようになります。
f:id:TomoG:20180806151857p:plain
 先ほど作ったGameManagerが破棄されることなく別のシーンに遷移しています

これで、保持しておきたい値は、このGameManagerにアクセスすることで、取得できるという設計になっています。

MainWindow以降

GameManagerが存在しているときに、フェードイン・アウトを行うよう指示をすると自動でUIのPanelを作成し画面遷移が行われます。
フェードイン・フェードアウトを行っているときのヒエラルキー画面は下図。
f:id:TomoG:20180806151910p:plain

このような構成にした理由

なぜ、呼ばれる度にオブジェクトを作成するようにしたかというと
全シーン常に存在するGameManagerに非アクティブであってもゲームオブジェクトを常にぶら下げたくなかった
という思惑があります。
一々オブジェクト作成を行っている方が処理が重くなる気もしますが
・シーン遷移時は比較的処理が軽量なこと
・オブジェクトの管理を容易にすること
を考えて、このようにしました。

2018/12/15 ページ全体大幅修正