ベルトコンベア

Unityでベルトコンベアを作りました。

動く足場と違い、ベルトコンベアだとプレイヤー等は子要素にしていません。
接触したプレイヤー等を把握して、位置情報を直接書き換える形で実装しています。

簡単な方法は、OnCollisionStay2D辺りでtransform.positionを変更する事だと思います。

Rigidbodyを使っている場合はtransform.positionではなくrigidbody.positionを更新したほうが良いようです。
また、Rigidbodyの更新タイミングよりOnCollision周りが遅いので、OnCollisionEnter辺りで保持してFixedUpdateで更新した方が良いのかもしれません。

動画で動いているベルトコンベアのコードは大体こんな感じ。
木箱にはRigidbody2Dが必要です。

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

public class BeltConveyorManager : MonoBehaviour
{
    public float speed = 3.0f;

    float diffX = 0.0f;
    readonly List<GameObject> gameObjects = new();

    void Start()
    {
        diffX = speed * Time.fixedDeltaTime;
    }

    private void FixedUpdate()
    {
        foreach(GameObject gameObject in gameObjects)
        {
            Vector2 speed = new Vector3(diffX, 0);
            Vector2 newPos = gameObject.GetComponent<Rigidbody2D>().position + speed;
            gameObject.GetComponent<Rigidbody2D>().position = newPos;
        }
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if(collision.gameObject.GetComponent<Rigidbody2D>() != null)
        {
            gameObjects.Add(collision.gameObject);
        }
    }

    private void OnCollisionExit2D(Collision2D collision)
    {
        if (gameObjects.Contains(collision.gameObject))
        {
            gameObjects.Remove(collision.gameObject);
        }
    }
}