Why is the relativeVelocity of a Collision always zero in OnCollisionEnter and OnCollisionStay?

I am colliding a GameObject (with a rididBody and a capsuleCollider on it) with a static mesh collider (the game world).

The relativeVelocity member of the Collision parameter in OnCollisionEnter and OnCollisionStay always has a magnitude of zero.

Surely it’s impossible for objects to collide if they have no relative velocity?

The physics system does a great job of bouncing around balls and cubes, but, IMHO, anything more complex is known to take a lot of care and feeding.

Take a look at the “compound collider” system. One trick is to have OnCollision only on the parent – all child subcolliders will then count as the parent collider. Can also manually test-for and find your own parent, or test you are merely a child subcollider (a single collision will fire you and your parent’s OnCollsion.)

Rigidbodies are meant to be frozen by setting isKinematic true. I wouldn’t be surprised if there are some cases where a fully contrained RB acts differently from a kinematic one. The constraint system, again IMHO, is known to have combinations which just act odd.