We’re using mesh colliders as triggers to specify areas in a level where particle effects are active (i.e. ember effects when near lava).
Player
Capsule Collider
Has a Rigidbody
Effect Zone
Mesh Collider
Marked as Convex
Marked as a Trigger
In 4.6, everything worked fine, but in 5.4, we get an endless cycle of OnTriggerEnter and OnTriggerExit calls back to back while the player is in the effect zone–causing the particle effects to start and stop and restart constantly. Adding a rigidbody to the mesh trigger doesn’t do anything.
Is this a bug or expected behavior?
Other collider shapes work fine, but we need the flexibility of a mesh trigger to better fit the level. I’ve seen other similar questions asked, but none were from Unity 5 and none described an endless loop of OnTriggerEnter and OnTriggerExit like I’m seeing.
Found the solution, but it was not what I expected.
There were enemies in the scene that enable and disable collision between with the player based on state. We are using Physics.IgnoreCollision for this. Apparently in 5.4, “IgnoreCollision will reset the trigger state of affected colliders, so you might receive OnTriggerExit and OnTriggerEnter messages in response to calling this.” See: Unity - Scripting API: Physics.IgnoreCollision
So, while our player was inside the trigger volume, every time the enemy script called IgnoreCollision, the OnTriggerEnter and OnTriggerExit callbacks were hit.
We are looking into a solution where we do not have to use IgnoreCollision for those enemies, but a workaround is to use a sentinel bool in OnTriggerEnter to prevent extra starts from happening, and using a dead man’s switch (a timeout) in OnTriggerExit.