Colisionadores de tipo trigger
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 15 de 71.
Un colisionador con Is Trigger marcado deja de ser sólido: los cuerpos rígidos lo atraviesan, y Unity informa de la superposición en su lugar, llamando a OnTriggerEnter en los scripts de ambos objetos. Las líneas de meta, los objetos coleccionables 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 cambia su colisionador a un 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 guardia tiene un Rigidbody cinemático (Add Component, Rigidbody, Is Kinematic marcado): la gravedad y los golpes no lo afectan, y aun así cuenta como un Rigidbody. Sin los Rigidbodies de los guardias, un guardia atraviesa la zona y la consola queda 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 que uno de los objetos del par tenga un Rigidbody. La próxima lección trata sobre other, el colisionador que entró.
Desafío
FácilHaz volar el dron a través de los anillos y deja que cada anillo lo informe.
- En
Drone.cs, dentro deStart(), establecebody = gameObject.AddComponent<Rigidbody>();ybody.isKinematic = true;para que vuele nivelado. - En
Ring.cs, dentro deStart(), estableceGetComponent<Collider>().isTrigger = true;.
Pulsa «Jugar»: el dron vuela a través de los anillos y la consola muestra Ring1 passed, Ring2 passed y Ring3 passed. Después, pulsa «Comprobar».
Pruébalo tú mismo
using UnityEngine;
public class Ring : MonoBehaviour
{
void Start()
{
// Haz que el collider de este anillo sea un trigger
}
void OnTriggerEnter(Collider other)
{
Debug.Log(name + " passed");
}
}
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