【Unity 2D】複数の背景画像を速度を変えてスクロールする方法

Unity 2D開発において背景画像を複数枚重ねて横スクロールする際に、より手前の画像スクロールを速くすると遠近感が出ます(以下のGIF参照)。

本記事では、右方向にカメラが強制的に横スクロール環境で、複数の背景画像を左方向に速度を変えて横スクロールさせる方法について解説します。

複数背景画像のスクロール

GIFにあるように3枚の背景画像を用意して、一番奥の画像を「BG_0」というゲームオブジェクト名にして、次が「BG_1」、一番手前が「BG_2」としています。BG_0は最もゆっくり左方向にスクロールさせて、BG_2が一番速くスクロールするようにします。

下記のスクリプトをメインカメラにアタッチして、メインカメラのインスペクターからスクリプトの各public変数(背景画像のゲームオブジェクトと各背景画像の移動速度)に値をセットして、シーンを再生するとGIFのような動きになります。

public変数のscrollSpeedですが、カメラの移動速度を1とした時の各背景画像の移動速度を割合(0〜1)で設定します。0.2とすれば、2割減速する意味になります。

using UnityEngine;

public class MultiBgScroll : MonoBehaviour
{
    // 背景画像(インスペクターからセット)
    public GameObject[] bgObjects = new GameObject[3];

    // カメラの移動スピードを1とした時の移動割合
    public float[] scrollSpeed = new float[3];

    void Update()
    {
        // カメラの移動(メインカメラに本スクリプトをアタッチ)
        Vector3 v3 = Vector3.right * Time.deltaTime;
        transform.position += v3;


        // 背景画像の移動
        for (int i = 0; i < bgObjects.Length; i++)
        {
            bgObjects[i].transform.position -= Vector3.right * v3.x * scrollSpeed[i];
        }
    }
}

 

sponsor