Menu
CoddyTech

Colisionadores de disparador

Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 15 de 63.

Un colisionador con la casilla Is Trigger marcada deja de ser sólido: los cuerpos rígidos lo atraviesan y, en su lugar, Unity informa de la superposición llamando a OnTriggerEnter en los scripts de ambos objetos. Las líneas de meta, los objetos recogibles y las zonas de peligro son activadores. En el código, la casilla corresponde a la propiedad isTrigger del colisionador.

La zona de alarma de esta bóveda configura su colisionador como activador cuando empieza el juego, lo que equivale a marcar la casilla, y hace sonar la alarma cuando entra un guardia:

void Start()
{
    GetComponent<Collider>().isTrigger = true;
}

void OnTriggerEnter(Collider other)
{
    Debug.Log("Alarm!");
}

Los activadores siguen la misma regla que las colisiones: Unity solo comprueba un par cuando al menos uno de los dos objetos tiene un Rigidbody. Dos objetos sin uno nunca se detectan entre sí, sean activadores o no. Los guardias patrullan mediante un script, así que cada uno tiene un Rigidbody cinemático (Add Component, Rigidbody, Is Kinematic marcado): la gravedad y los empujones no lo afectan, y sigue contando como un Rigidbody. Sin los Rigidbody de los guardias, un guardia atraviesa la zona y la Console permanece vacía. Sin isTrigger, la zona es una caja sólida, y un cuerpo cinemático nunca toca un colisionador que no tenga un Rigidbody, así que tampoco se registra nada. Basta con un Rigidbody en el par, en cualquiera de los dos objetos. En la siguiente lección veremos other, el colisionador que entró.

challenge icon

Desafío

Fácil

El Drone debe volar por una ruta que atraviese tres anillos, y cada Ring debe registrar su nombre y passed cuando el dron lo atraviese, por ejemplo Ring1 passed. Todavía no funciona nada: el script del dron lo hace volar con MovePosition, pero no hay ningún Rigidbody en la escena y los anillos son sólidos.

  • En Drone.cs, dale al dron un Rigidbody cuando empiece el juego y guárdalo en body. El dron debe volar nivelado a lo largo de su ruta. Un cuerpo en el dron basta para los tres anillos.
  • En Ring.cs, haz que el collider de cada anillo sea un activador cuando empiece el juego.

Pulsa Play y observa la Consola; luego pulsa Check.

Pruébalo tú mismo

using UnityEngine;

public class Ring : MonoBehaviour
{
    void Start()
    {
        // Convierte el collider de este anillo en un trigger
    }

    void OnTriggerEnter(Collider other)
    {
        Debug.Log(name + " passed");
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Física y jugabilidad