other | The Collision data associated with this collision event. |
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) { foreach (ContactPoint contact in collision.contacts) { Debug.DrawRay(contact.point, contact.normal, Color.white); } 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]; Quaternion rot = Quaternion.FromToRotation(Vector3.up, contact.normal); Vector3 pos = contact.point; Instantiate(explosionPrefab, pos, rot); Destroy(gameObject); } }