OnCollisionEnter
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 8 de 71.
Cuando dos colisionadores empiezan a tocarse, Unity llama a OnCollisionEnter(Collision collision) en los scripts de ambos objetos. Se llama una vez, en el paso de física en que empieza el contacto, y no vuelve a llamarse mientras sigan en contacto. Para que se produzca una colisión, al menos uno de los dos necesita un Rigidbody que la física mueva: una pared y un suelo sin Rigidbody nunca se informan mutuamente de nada.
Esta caja registra un mensaje cuando cae al suelo. Tiene un Rigidbody, así que cae, y el mensaje llega en el paso en que toca el suelo:
void OnCollisionEnter(Collision collision)
{
Debug.Log("Thud!");
}La caja registra un mensaje una vez, y solo vuelve a hacerlo después de separarse del suelo y caer por segunda vez. El suelo también recibe el mensaje: un script en él detectaría la caída de la caja, aunque el suelo no tenga Rigidbody. El nombre y el parámetro deben ser exactos. Un método llamado onCollisionEnter nunca se llama y no genera ningún error. Si el método recibe un Collider, Unity registra Script error: OnCollisionEnter junto con This message parameter has to be of type: Collision y lo ignora. Mientras los dos sigan en contacto, Unity llama a OnCollisionStay en cada paso de física y, cuando se separan, llama a OnCollisionExit una vez.
Desafío
FácilLa placa de presión cuenta lo que cae sobre ella.
- Añade un campo
private int presses;aPressurePlate. - Añade
void OnCollisionEnter(Collision collision): suma 1 apressesy registra"Pressed " + presses.
Presiona «Jugar»: la caja cae y la Consola muestra Pressed 1, una vez. Después, presiona «Comprobar».
Pruébalo tú mismo
using UnityEngine;
public class PressurePlate : MonoBehaviour
{
// Cuenta cada aterrizaje y regístralo: Pressed 1, Pressed 2, ...
}
Todas las lecciones de Física y jugabilidad
1Cuerpo rígido
Gravedad y masaEmpujar con AddForceSaltar con un impulsoFixedUpdate para físicaVelocidadCuerpos cinemáticosRepaso: plataforma de lanzamiento4Corrutinas
InvocarInvokeRepeating y CancelInvokeTu primera corrutinaBucles en corrutinasDetener corrutinasRepaso: cuenta regresiva10Proyecto: Escape de la arena
La arenaCazadores2Colisiones
OnCollisionEnter¿Qué golpeé?Romper al impactarDe pie sobre el sueloRebote y fricciónFormas de los collidersRepaso: muro destructible5Proyecto: Carrera de Monedas
La pelota rodanteMonedas para recoger3Disparadores
Colisionadores de tipo triggerOnTriggerEnterObjetos coleccionablesLas cajas guardan el restoZonas letalesEntrada y salidaRepaso: llave y puertaPractica por tu cuenta: Playground de Unity