This is just a quick post about how I’ve ended up implemented conveyor belt physics. I googled it a bit and many of the solutions involved rollers or applying forces to objects in OnCollisionStay() but these didn’t have the look and feel that I expected given how conveyors work, and I thought the roller option might end up being pretty heavy.
My solution is very simple but works great. I have a box collider with a kinematic rigidbody, then in the fixed update loop I move the rigidbody backwards by setting rigidbody.position, then use MovePosition() to move it forwards, putting it back where it started. This combination results in the actual conveyor belt object not moving but all objects colliding with it acting as if it was moving forwards.
Here’s a quick demo
(click the buttons to change the speed, grab the cube and capsules to see how the physics reacts)
And here’s the script