Erik Putz
Erik Putz

Reputation: 359

OnCollisionEnter is not called in unity with 2D colliders

I checked nearly every answer for this, but those were mostly simple errors and mistakes. My problem is that OnCollisionEnter is not called even when colliding whith other rigidbody.

here is the part what does not get called:

 void OnCollisionEnter(UnityEngine.Collision col) {
        Debug.Log("collision!!!");
        foreach(ContactPoint contact in col.contacts) {
            //checking the individual collisions
            if(contact.Equals(this.target))
            {
                if(!attacking) {
                    Debug.Log("hitting target");
                } else {
                    Debug.Log("dying");
                    //engage death sequence
                }
            }
        }
    }

Not even the "collision!!!" message appears. Do I understand the usage wrong, or did I forget something?

Upvotes: 15

Views: 31893

Answers (6)

Khayam Gondal
Khayam Gondal

Reputation: 2383

Are you using 2D colliders and rigidbodies? If so use this function instead of OnCollisionEnter

void OnCollisionEnter2D(Collision2D coll)
    {
        Debug.Log(coll.gameObject.tag);

    }

Upvotes: 55

strangedk
strangedk

Reputation: 19

You just need attach script to the same object, whose need detects the collision.

Upvotes: 0

Fables Alive
Fables Alive

Reputation: 2798

because you misstyped class name of parameter. this makes no error also not works. eg:

OnCollisionEnter(Collider other) //this is wrong
OnCollisionEnter(Collision other) //this is correct

Upvotes: 0

rudy
rudy

Reputation: 11

Here is what I do:

  1. Make sure that object you wish to collide with target has non-kinematic rigidbody and mesh collider. My hitter object is a cube and just change its collider to mesh collider
  2. On mesh colider inspector make sure you enable convex. Please see more mesh collider inspector detail here

Now your OnCollisionEnter works. I hope this helps you.

Upvotes: 1

Julio Contreras
Julio Contreras

Reputation: 21

Try this

http://docs.unity3d.com/Documentation/ScriptReference/Collider.OnCollisionEnter.html

using UnityEngine;
using System.Collections;

public class Example : MonoBehaviour {
  void OnCollisionEnter(Collision collision) {

    foreach (ContactPoint contact in collision.contacts) {
        Debug.DrawRay(contact.point, contact.normal, Color.white);
    }

    if (collision.relativeVelocity.magnitude > 2){
        audio.Play();        
    }

  }
}

Upvotes: 2

Alex
Alex

Reputation: 1109

You need to make sure that the collision matrix (Edit->Project Settings->Physics) does not exclude collisions between the layers that your objects belong to.

Unity Docs

You also need to make sure that the other object has : collider, rigidbody and that the object itself or either of these components are not disabled.

Upvotes: 3

Related Questions