I’m confused by some collision behavior with some objects of mine. I have one stationary object, a sphere, which has an OnTriggerEnter script on it. I also have one moving object, an icosahedron, which in this example is moving up towards the sphere. The sphere has a trigger collider, and the icosahedron has a non-trigger collider.
What I’m finding is that OnTriggerEnter isn’t called on the first frame that the objects overlap. Instead, it’s called one frame later.
Here are the two objects, paused on the first frame where they visually appear to overlap:
And here are just the colliders, showing them clearly overlapping:
However, OnTriggerEnter isn’t called that frame. Instead, it’s called on the following frame, where the objects aren’t actually overlapping anymore:
I have the moving object’s collision detection set to Continuous Dynamic for the most accuracy. I realize it’s possible for a very fast moving object to bypass the collision detection if it’s moving fast enough, but what puzzles me here is that OnTriggerEnter isn’t called when the two objects initially overlap. It’s only on the next frame that the collision occurs.
From the docs on OnTriggerEnter, it says, “The GameObject with Collider.isTrigger set to true has OnTriggerEnter called when the other GameObject touches or passes through it.”
I also tried calling Physics.OverlapSphere in FixedUpdate, expecting more accurate results, but it’s the same thing. OverlapSphere doesn’t find any results on the first frame where the colliders overlap. Instead, it only finds results on the subsequent frame.
In this case, the icosahedron is clearly touching the sphere, so I’m not sure why OnTriggerEnter isn’t being called. Is there some Unity physics/collision convention I’m missing?




