- Home /
How to know which Collider fires Trigger event
I have an object hierarchy with multiple coliders, and the parent has a rigidbody on it. I have learned now that each collider will cascade it's collision messages up the hierarchy to the first rigidbody it finds.
The method signature for collisions is: OnTriggerEnter2D(Collider2D other)
, which allows me to know what has collided into my object. However, since I have multiple colliders on my object that could have generated this message, I don't currently know which part of my object was collided into. Is there an easy way to know which one?
Answer by tanoshimi · Jul 24, 2015 at 10:26 PM
If I understand your situation correctly, you've created a compound collider. The main purpose and design of compound colliders is to act as one, and they also notoriously don't play nice as triggers (see, for example, http://answers.unity3d.com/questions/18087/rigidbody-trigger-collider-vs-static-collider-no-o.html, in which even a Unity core dev isn't sure of their behaviour!)
OnTriggerXXX messages cascade up the object hierarchy until a Rigidbody is found, so if you want to know which child collider was hit, give each its own Rigidbody.
Unfortunately, adding a rigidbody to my child changes behaviour of my child during a scaling operation that I do. It seems that either way, I'm going to have to code a work-around.
As an aside, if anyone at Unity is reading this, it would be a great idea to write in the doc's the feature of compound colliders. I did not see this when reading about OnTriggerXXX
And, as another aside, if anyone at Unity is reading this, due to compound colliders being a thing, providing both the interacting colliders in the delegate would be a good feature to consider for the future.
Your answer
Follow this Question
Related Questions
Ignore sub-colliders for center of mass in Rigidbody2d? 1 Answer
Box and circle Collider doesn't work 1 Answer
Internal collisions 1 Answer
Rigidbody2D.attachedColliderCount question C# 0 Answers
Child collider doesn't work 0 Answers