簡単に2Dゲームの背景画像を右から左へ動かす【Unityゲーム制作】

Untiy2Dゲームで背景の画像を右から左に動かしてみます。色々な方法がありますが、個人的に一番簡単だと思う方法です。

はじめに

Unityのバージョンは2020.3.26f1です。

事前準備

まずは背景画像をアセットストアからダウンロード。もちろん、自分で作成した背景でもOK。

今回は「Free 2D Adventure Beach Background」を選択。他にもフリーの2D背景用画像は沢山あるので、どれを使ってもOK。

マイアセットに追加したら、ダウンロード、インストールをしておきます。

実装開始

空のオブジェクトを作成し名前を「BackGround」とします。

背景の設定

インポートした中から「day-backgrounds」フォルダ内にある画像を利用していきます。

まずはbeach-skyをBackGroundの配下に置きます。ゲーム画面から少しはみ出す感じにスケールを調整。

back-cloudを何個かBackGroundの配下にセットし、位置とスケールを変更。

雲が裏にいき隠れてしまう場合はレイヤーの順序を変更。

下記の様な感じに背景が出来ればOK。

背景を動かす

出来上がった背景を動かしていきます。

試しに、BackGroundオブジェクトの位置Xの値を変更してみると背景がズレます。これをスクリプトで実装していきます。

まずはBackGroundを配下ごとコピーして、位置Xを変更。背景が2つつながるようにします。

次に下記スクリプトを作成。

簡単に説明すると、指定したスピードで位置を移動。指定位置まで移動したら初めの位置まで戻るという感じです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BackGroundMovement : MonoBehaviour
{
    [SerializeField] private float Speed;
    [SerializeField] private float ResetPosition;

    private float StartPosition;
    void Awake()
    {
        StartPosition = this.transform.position.x;
    }
    void Update()
    {
        this.transform.Translate(Speed, 0, 0, Space.World);

        if (this.transform.position.x < ResetPosition)
        {
            this.transform.position = new Vector3(StartPosition, 0, 0);
        }
    }
}

Translateはオブジェクト位置の移動ですね。positionで動かしても良いですが、質量の無いものはTranslateで動かした方がすっきりしたり。逆に質量のある物はpositonで動かした方が良いって感じですかね。

これをBackGroundオブジェクトにアタッチ。それぞれのパラメーターをセットすれば完成。

スピードは同じじゃないと動きがおかしくなるのでパラメータではなく、直接指定の方が良いかも。

ゲームによっては背景じゃなくてカメラを動かすっていう方法もあったり、UVスクロールを使うとか他の方法もあるけど、たぶん2枚画像を並べる方法が現状では一番簡単なのかなー。と個人的には思ったり。

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