本記事ではUnityでフェードイン・アウトを行う方法についてご紹介していきたいと思います。
Unityで画面遷移するとき、何もカスタマイズしないと素っ気ないシーン間の遷移です。
そのシーン間の遷移のカスタマイズ方法として、一番先に思い浮かぶのは、フェードイン・フェードアウトではないでしょうか。
結果
まずは、どのように動くのか御覧下さい。
このようにフェードイン・フェードアウトが動いています。
画面内のUIがしょぼいのは適当に配置しただけでご容赦を・・・
ソースコード
<注>
・シーン間をまたいでいるため、シーン依存でないオブジェクトにスクリプトをアタッチする必要があります。
そのシーン間をまたぐオブジェクトを今からご説明していきます。
ゲームマネージャーの遷移
Unityのシーン全体を管理する者(マネージャー)とすると
このマネージャーのフローは以下のようになります
MainWindowはTitleのことです(命名は気にしないでください・・・)
最初のManageScene時に作ったマネージャーをゲーム全体のマネージャーとしています。
フロー説明
ManagerScene
ゲームを起動したら、まずManageSceneに移ります。
このシーンはゲーム全てに使用するオブジェクト・変数を定義します。
例)BGMの音量・Audioオブジェクト
これは以下のサイトを参考にしました。
kan-kikuchi.hatenablog.com
このManageSceneで作られるGameManagerというオブジェクトでゲーム全体を統括します。
フェードイン・アウトはを行うスクリプトはこのオブジェクトにアタッチします。
このGameManagerというオブジェクトは、シーン間移動をしても破棄されないよう設定しているため、全てのシーンに存在することになります。
ManageScene自体はGameManagerオブジェクトを作成したらMainWindowにシーン遷移するようになっています。
そしてMainWindowに遷移した後は下図のようになります。
先ほど作ったGameManagerが破棄されることなく別のシーンに遷移しています
これで、保持しておきたい値は、このGameManagerにアクセスすることで、取得できるという設計になっています。
MainWindow以降
GameManagerが存在しているときに、フェードイン・アウトを行うよう指示をすると自動でUIのPanelを作成し画面遷移が行われます。
フェードイン・フェードアウトを行っているときのヒエラルキー画面は下図。
このような構成にした理由
なぜ、呼ばれる度にオブジェクトを作成するようにしたかというと
全シーン常に存在するGameManagerに非アクティブであってもゲームオブジェクトを常にぶら下げたくなかった
という思惑があります。
一々オブジェクト作成を行っている方が処理が重くなる気もしますが
・シーン遷移時は比較的処理が軽量なこと
・オブジェクトの管理を容易にすること
を考えて、このようにしました。