Menu
CoddyTech

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.

challenge icon

Desafío

Fácil

La placa de presión cuenta lo que cae sobre ella.

  1. Añade un campo private int presses; a PressurePlate.
  2. Añade void OnCollisionEnter(Collision collision): suma 1 a presses y 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

Practica por tu cuenta: Playground de Unity