今回はUnityでシーンを移動する際の「アニメーション」や「フェード」を実装していきます。画面が切り替わる時に徐々に暗くしたり、部分的に暗くする感じですね。
はじめに
「Unity 2020.3.21f1」ヴァージョンで作成しています。
二つのシーンを用意している状態とします。
アニメーションでシーン切り替え
まずはシーン切り替え時に簡単なアニメーションを追加してみます。
切り替え前のシーンに、ヒエラルキーメニューでパネル追加。

黒色のパネルを用意して、次画面に切り替わるときに、「左から黒い部分が進出」してくる感じにします。 右の位置を一番左になるように変更します。

idleとstartと言う名前でアニメーションを追加します。

startアニメーションにパネルを設定。最初はパネルが左端にある状態で、最後は画面全体が真っ黒な状態です。
中間ポイントをセットしていますが、最初と最後だけでもOK。

トリガーを追加して、トリガーでアニメーションが動くようにします。

Panelにスクリプトを追加して、下記の様に中身を作成。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class Menuselect : MonoBehaviour { public Animator anim; public void StartGame() { StartCoroutine(LoadScene()); } public void EndGame() { Application.Quit(); } IEnumerator LoadScene() { anim.SetTrigger("gamestart"); yield return new WaitForSeconds(0.8f); SceneManager.LoadScene("GameScene"); } }
これでStartGame()を呼び出すと左から徐々に黒くなって、真っ黒になった後に次のシーンが出てくるようになります。
スクリプトで実装
次はスクリプトで実装してみます。
同じようにPanelを追加し画面全体が真っ暗になるようにします。


Imageを無効にして、色の透明度(アルファ値)を0にします。

スクリプトは下記の様に作成。
やっていることは簡単で、StartGame()が呼ばれたらパネルの画像を有効にして、徐々に暗くしていき、真っ暗になったらシーンを移動するって感じです。フェードアウトっぽい感じですね。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class Menuselect : MonoBehaviour { public Image PanelImage; [SerializeField] private float alphaSpeed; private bool isSceneChange; private bool isChangeEnd; private float alphaValue; private Color PanelColor; private void Awake() { isSceneChange = false; isChangeEnd = false; alphaValue = 0f; PanelColor = PanelImage.color; } public void StartGame() { PanelImage.enabled = true; isSceneChange = true; } private void Update() { if (isSceneChange) { alphaValue += alphaSpeed * Time.deltaTime; PanelImage.color = new Color(PanelColor.r, PanelColor.g, PanelColor.b, alphaValue); if (alphaValue >= 1) { isSceneChange = false; isChangeEnd = true; } } if (isChangeEnd) SceneManager.LoadScene("GameScene"); } public void EndGame() { Application.Quit(); } }
あとは、パラメータにセットすればOK。AlphaSpeedは暗転するスピードですね。

あとは、関数をボタンクリックに割り当てて完成。

気を付けるのはアルファ値がColorクラスでは0-1の範囲ってことですかね。

単純な暗転ならスクリプトだけで良いけど、少し変化を加えたいならアニメーションで実装と言う感じですかね。