OnCollisionEnter se llama cuando el Collider o Rigidbody entra en contacto con otro Collider o Rigidbody.
A diferencia de lo que ocurre en OnTriggerEnter, a OnCollisionEnter se le pasa la clase Collision, no un Collider. La clase Collision contiene información sobre puntos de contacto, velocidad de impacto, etc. Si no vas a usar el parámetro collisionInfo en la función, déjalo fuera para evitar cálculos innecesarios. Ten en cuenta que los eventos de colisión se envían sólo si al menos uno de los Colliders también tiene un Rigidbody no cinemático adjunto.
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { AudioSource audio; void Start() { audio = GetComponent<AudioSource>(); } void OnCollisionEnter(Collision collision) { // Debug-draw all contact points and normals foreach (ContactPoint contact in collision.contacts) { Debug.DrawRay(contact.point, contact.normal, Color.white); } // Play a sound if the colliding objects had a big impact. if (collision.relativeVelocity.magnitude > 2) audio.Play(); } }
Otro ejemplo:
// A grenade // instantiates a explosion prefab when hitting a surface // then destroys itself using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { public Transform explosionPrefab; void OnCollisionEnter(Collision collision) { ContactPoint contact = collision.contacts[0]; // Rotate the object so that the y-axis faces along the normal of the surface Quaternion rot = Quaternion.FromToRotation(Vector3.up, contact.normal); Vector3 pos = contact.point; Instantiate(explosionPrefab, pos, rot); Destroy(gameObject); } }