Introducción
En este artículo vamos a ver cómo funciona el método OnTriggerEnter en Unity. Esta función nos permitirá saber cuándo el Collider de un GameObject ha entrado en la región de otro Collider que está configurado como detector. OnTriggerEnter y OnTriggerExit son métodos muy similares pero cambia el momento en el que sucede la ejecución de estos métodos, entender estas funciones nos permitirá ejecutar acciones en el momento preciso en que lo necesitamos.
Este artículo incluye un paquete de Unity para descargar:
He creado un prototipo que permite analizar el funcionamiento de los eventos Trigger en Unity, más abajo encontrarás dos vídeos que hablan del funcionamiento de este prototipo. Si lo deseas puedes descargar el paquete de Unity e importarlo en tu propio proyecto para verlo en acción.
NOTA: He actualizado el paquete y no se ve exactamente igual que en los vídeos pero el funcionamiento es el mismo.
Vídeos que explican el funcionamiento del prototipo anterior:
En este primer vídeovemos cómo configurar los Colliders para que los eventos OnTrigger funcionen.
En la segunda parte analizamos el código del Script donde están definidas las funciones OnTriggerEnter y OnTriggerExit.
Cómo funciona OnTriggerEnter en Unity
El método OnTriggerEnter se encuentra definido en la clase MonoBehaviour. Es decir que cualquier nuevo Script por defecto lo va a tener por herencia.
Para que ocurra la ejecución de OnTriggerEnter deben darse varias condiciones.
La primera es que deben haber dos GameObjects con Colliders involucrados, uno de los Colliders debe estar en modo Trigger, para esto se debe tildar la casilla «Is Trigger» en el inspector.
Además al menos uno de los GameObjects involucrados debe tener asignado un componente RigidBody, porque OnTriggerEnter está relacionado a la parte física del motor.
Declaración de la función OnTriggerEnter
El hecho de que esté definido en la clase MonoBehaviour y un nuevo Script por defecto la implemente no significa que automáticamente tendremos a OnTriggerEnter en nuestro Script, debemos declararlo y lo hacemos de la siguiente manera:
private void OnTriggerEnter(Collider c){ //Acciones a realizar cuando se detecta una entrada al Trigger. }
Si las condiciones se dán, este método se ejecutará automáticamente, así que en su interior escribimos todo lo que sea necesario hacer cuando eso pase.
El parámetro «Collider c» que recibe el método, es el Collider del GameObject que entró en contacto con el Trigger. Podemos usar este parámetro para hacer muchas cosas, por ejemplo obtener el GameObject que tiene asignado ese collider, esto lo hacemos simplemente con:
c.gameObject
A partir de ahí podemos leer cualquier otra componente que tenga asignado el GameObject, su tag, su layer, modificar lo que necesitemos y se nos permita modificar, ejecutar métodos definidos en Scripts que pueda tener asignados y muchas más acciones.
Para saber más sobre funciones de programación con parámetros te invito a ver este vídeo o leer su artículo correspondiente.
Conclusión
El método OnTriggerEnter nos permite detectar cuándo dos GameObjects solapan sus Colliders, de esa forma podremos aplicar todas las acciones que sean necesarias.
OnTriggerEnter se ejecuta automáticamente, para para esto deben darse algunas condiciones, la primera es que deben haber dos GameObjects con Colliders involucrados y uno de ellos en modo Trigger y la segunda es que al menos uno de los GameObjects debe tener asignada una componente RigidBody.