【Unity】2D背景を無限にループスクロールさせる方法

Tips

今回説明するのは、 2D の 背景イラスト を無限に ループスクロール させる方法です。
(例は容量の関係で画質が荒くなっています)

スポンサーリンク

環境

・Unity 2022.3.5f1

方法

ループさせたい画像をインポートして
「Texture Type」を「Sprite (2D and UI)」
「Wrap Mode」を「Repeat」にする。
変更後は「Apply」で変更を適用。

新規マテリアルを作成し、Shader を「Unlit/Texture」にする。
Texture設定は無しでOK。

シーン上にCanvasを配置して、その下にImageを作成。
先ほどインポートした画像と作成したMaterialをアタッチする。

新しくC#スクリプトを作成

using UnityEngine;
using UnityEngine.UI;

public class LoopScrollImage : MonoBehaviour
{
    private const float MAX_OFFSET = 1f;
    private const string PROPERTY_NAME = "_MainTex";

    [SerializeField] private Vector2 _offsetSpeed;
    [SerializeField] private Material _material;

    private void Reset()
    {
        // コンポーネントがアタッチされたタイミングでマテリアルを取得する
        if (TryGetComponent(out Image image))
        {
            _material = image.material;
        }
    }

    private void Update()
    {
        if (_material != null)
        {
            var x = Mathf.Repeat(Time.time * _offsetSpeed.x, MAX_OFFSET);
            var y = Mathf.Repeat(Time.time * _offsetSpeed.y, MAX_OFFSET);
            var offset = new Vector2(x, y);
            _material.SetTextureOffset(PROPERTY_NAME, offset);
        }
    }

    private void OnDestroy()
    {
        // オブジェクトが破棄されるタイミングに位置をリセットする
        if (_material != null)
        {
            _material.SetTextureOffset(PROPERTY_NAME, Vector2.zero);
        }
    }
}

先ほど作成したImageオブジェクトにこのスクリプトをアタッチして、Offset Speedを自由に設定したら完成!

今回使用させていただいた画像はこちらです。

ずんだもん_パターン背景素材 / @ゅR さんのイラスト
1920×1080 背景透過png素材 Youtube規格16:9。 動画の背景や壁紙等に使用できます。 コンテンツツリー登録お願いします
TipsUI
スポンサーリンク
フーシャ

主にUnityを触ってるクライアントエンジニア。
学部の情報工学科卒業後、
スマホ向けゲームの開発/運営会社に新卒で入社して現在5年目の社会人です。

フーシャをフォローする
フーシャをフォローする

コメント

  1. […] this & more VFX Shaders on the Unity Asset Store. はなたか の Unity勉強部屋 【Unity】2D背景を無限にループスクロールさせる方法 […]

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