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?
Are you using 2D colliders and rigidbodies? If so use this function instead of OnCollisionEnter
void OnCollisionEnter2D(Collision2D coll)
{
Debug.Log(coll.gameObject.tag);
}
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.
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();
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With