Загрузка данных


using UnityEngine;

public class InfiniteBackground : MonoBehaviour
{
    public Transform cameraTransform; // Сюда перетащим Main Camera
    private float viewZone = 10f;     // Зона видимости (на сколько камера должна отойти)
    private float backgroundSize;     // Ширина одного куска фона

    private Transform[] layers;       // Сюда автоматически запишутся два наших куска
    private int leftIndex;
    private int rightIndex;

    void Start()
    {
        // Находим камеру, если забыли привязать в инспекторе
        if (cameraTransform == null) 
            cameraTransform = Camera.main.transform;

        // Считаем ширину картинки по Sprite Renderer
        backgroundSize = GetComponentInChildren<SpriteRenderer>().bounds.size.x;

        // Находим оба куска фона (оригинал и дубликат)
        layers = new Transform[transform.childCount];
        for (int i = 0; i < transform.childCount; i++)
        {
            layers[i] = transform.GetChild(i);
        }

        leftIndex = 0;
        rightIndex = layers.Length - 1;
    }

    void Update()
    {
        // Если камера ушла вправо дальше, чем крайний левый кусок
        if (cameraTransform.position.x > (layers[rightIndex].transform.position.x - viewZone))
        {
            ScrollRight();
        }
    }

    private void ScrollRight()
    {
        // Берем самый левый (задний) кусок и переносим его направо встык
        layers[leftIndex].position = new Vector3(layers[rightIndex].position.x + backgroundSize, layers[leftIndex].position.y, layers[leftIndex].position.z);

        // Обновляем индексы, кто теперь левый, а кто правый
        rightIndex = leftIndex;
        leftIndex++;

        if (leftIndex == layers.Length)
        {
            leftIndex = 0;
        }
    }
}