I came across the most of the threads regarding this problem, quite common.. My scenario is as follows: 2 objects: wall and arrow. They seem to be unable to interact. They lay on 2 different layers, which are flagged in the Layer Collision Matrix so they can interact. They are both in the same xy plane (same z coord) Both objects have PolygonCollider2D and none have Rigidbody2D. The arrow is trigger and the wall is not (btw I tried every combination). OnCollisionEnter2D just has a Debug.Log("colliding") and it never gets called. Then, what I noticed is that another object (Player) collides with wall but not with the arrow. I don't know what to try.. I'm using unity 4.5 (but I tried also on 4.6) and no more ideas come to my mind. Any suggestion?
If you don't add a Rigidbody2D then the colliders are static and should never ever be moved at runtime. This is why static/static will never collide. If you want to move them then add a Rigidbody2D. If you intend to move them using the Transform then set the Rigidbody2D to be Kinematic (not dynamic).
Thank you for your reply. Actually if I pay attention to the scene view I see the arrow collider moving with its gameobject so I don't think this is the point.
It will move if you're modifying the transform. My point is that it's expensive to move static colliders and they won't produce a callback when they collide which is what you're reporting.
Oh, that sounds like what I was looking for. I actually move it with the transform. If I understood correctly, moving via transform won't trigger the event? But if I use OnTriggerEnter2D? It should? Just for my understanding, will it work even if it could be more expensive?
As I said above; when you don't add a Rigidbody2D component then the colliders are static. Static colliders do not collide with each other (no matter what you set-up in the collision layer matrix) and won't produce a callback for collision or trigger. Add a Rigidbody2D to each and set them to be Kinematic. You'll then start to get callbacks. In your case, if your wall never moves then you can leave it without a Rigidbody2D (static)but if your arrow moves then you should add a Rigidbody2D component to it.