Rigidbody slowly falling through colliders

I have objects that are supposed to be following the player character around a level.
The level is a single, large mesh with a Mesh Collider attached to it.

The player character has a CharacterController and each of the objects that follow him has a Rigidbody (Using Gravity and not Kinematic) and a Capsule Collider attached. Each FixedUpdate(), the objects set to follow the player have their desired position calculated and are translated to that new position:

Vector3 movement = desiredPosition - transform.position;
transform.Translate(movement, Space.World);

They follow the player around fairly well but I have one strange issue with their behavior: When the player stops on a slope with one of the chaser objects also on a slope, sometimes (most of the time but not always) the chaser starts slowly moving downward—passing through any colliders (including the slope it should not be passing through). The chaser will continue to do this until the player moves a significant distance away at which time it snaps to its expected location.
I’ve tried the same behavior with a different setup involving scaled cubes to make platforms to eliminate the mesh collider as the cause. I do get the same (mis)behavior.

I’m unsure if this is a physics problem (I’ve tried turning up the Physics Solver Iterations, altering Interpolation, and other things to no avail) or what. It’s certainly gravity that’s pulling it down but it seems to do it in a fashion that make it ignore the behavior it’s Follow script applies unless the player is moving.

Does anyone have suggestion on what else to look at, change, etc? It’s kind of a game-breaker as it is now.

Hi, welcome to the forum!

Just to be clear, are you moving the rigidbody objects only with transform.Translate or are you just using that to position them initially and then letting the physics take over? Moving the transform directly will not respect colliders even if the object has a rigidbody. It is quite possible to push a rigidbody part way through a collider and then when the physics resumes, it can do a variety of things, including slowly falling through the collider. If you need the physical behaviour then it is best to use forces to move the rigibodies and the MovePosition function to position it. You may need to use a raycast or other techniques to detect the height of the ground and avoid pushing the object through it.

Thanks for the reply!
I was only moving it with transform.Translate() into positions that were, given the nature of their following algorithm, usually guaranteed to be above ground (and, in the instance of the bug, were always above ground). I wasn’t aware of Rigidbody.MovePosition(). I must have missed that while I was looking for alternatives to what I was doing. Perhaps that would have taken care of it.

I’ve ended up making their attached Rigidbody kinematic and using raycasts and my own math to simulate gravity. It seems to be doing the trick.