With OnCollisionEnter2D, what causes relativeVelocity to be 0?

I’m using a simple calculation in my OnCollisionEnter2D method where I bounce an object off a wall by reversing its relativeVelocity:

rBody.velocity = -col.relativeVelocity

However, sometimes this produces inconsistent results. I have four bullets firing simultaneously in different directions, and one of them stops moving after a collision seemingly at random.

For the time being, I’ve worked around the issue by assigning the object’s current velocity to a vector3 at the end of FixedUpdate and using that in place of relativeVelocity. But for future reference, I’d like to know what’s going on here.

I know that there are a myriad of reasons why physics objects might not behave as expected, but are there any common “gotchas” to explain the problem I’m having?

The fact that it happens only to one of the bullets and only after a few bounces makes me wonder if it’s purely a physics issue (unevenly drawn colliders?) rather than a code issue. The bullets have circle colliders, and they’re bouncing off a polygon collider that’s mostly rectangular (the surface they’re hitting should be flat).

Have you tried freezing the rotation of the bullets?