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];
}
}
}