シーン移動のアニメーション・フェードを実装【Unityゲーム制作】

今回は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の範囲ってことですかね。

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

タイトルとURLをコピーしました