ACTUALIZACIÓN IMPORTANTE
El artículo en el que acabas de entrar es un poco antiguo, actualmente tengo un contenido más reciente sobre este tema que puedo recomendarte. Pondré al principio este contenido más reciente pero podrás leer el contenido antiguo más abajo.
Sobre este tema del funcionamiento de los métodos OnTriggerEnter y OnTriggerExit en Unity he creado un prototipo para Unity que puedes descargar e importar en tu proyecto para ver en detalle su funcionamiento. En este prototipo puedes controlar un objeto con las flechas de dirección y al entrar en un collider pasarán una serie de cosas, todas ellas se logran haciendo uso de las funciones OnTriggerEnter y OnTriggerExit.
Paquete de Unity para descargar:
A continuación puedes descargar el paquete de Unity que al importarlo en tu motor, recuperarás los Assets que usamos y podrás probarlo en tu propia computadora.
ACERCA DE ESTOS VÍDEOS
A continuación tienes dos vídeos que explican el funcionamiento del prototipo para la detección de un objeto que entra dentro de un Collider. En el vídeo de la izquierda vemos cómo configurar los Colliders para que los eventos OnTrigger funcionen. En el vídeo de la derecha analizamos el código del Script donde están definidas las funciones OnTriggerEnter y OnTriggerExit. Descarga el paquete de Unity aquí.
MI LISTA DE REPRODUCCIÓN DE UNITY👇🏽
A PARTIR DE AQUÍ CONTINUA EL ARTÍCULO ANTERIOR
Introducción
En este artículo vamos a estudiar cómo utilizar los métodos OnTriggerEnter(Collider c) y OnTriggerExit(Collider c) para detectar al jugador en una región determinada y aplicar acciones cuando eso ocurra. Concretamente vamos a hacer que la puerta del GameDevLab se abra cuando el jugador esté frente a ella y se cierre cuando se aleje.
Antes de empezar te invito a ver el video que hice para resumir este artículo.
Procedimiento
Vamos a utilizar la estación «OnTriggerEnter/Exit«, la cual consiste en un portal que conduce a una habitación pequeña que por lo pronto no tiene nada especial.
Inicialmente la puerta se encuentra cerrada, nuestro objetivo es lograr detectar al personaje cuando se aproxima y abrir la puerta para dejarlo entrar y al alejarse del portal la puerta debe cerrarse.
Todos los elementos de la estación están contenidos en el GameObject «#6 OnTriggerEnter/Exit».
Este GameObject tiene asignado el Script «OnTriggerEnterExit» que es el que tenemos que completar en esta ocasión.
Además de un Mesh Collider para que el personaje no atraviese la estructura, también cuenta con un Box Collider en modo Trigger, como se observa en las figuras 3 y 4.
Vamos a utilizar este Collider para resolver el ejercicio.
Si querés saber un poco más sobre Colliders te invito a ver este video que hice para la serie Mi Primer Juego en Unity.
Resolución
Cuando abrimos el Script OnTriggerEnterExit por primera vez nos encontramos con dos métodos, el método openDoor() que abrirá la puerta y el método closeDoor() que la cerrará.
Artículo: ¿Qué es un método en programación?
Además, con comentarios en verde, está indicada la región donde se sugiere hacer la redefinición de los métodos OnTriggerEnter(Collider c) y OnTriggerExit(Collider c).
No nos vamos a preocupar por cómo se abre y cierra la puerta porque eso ya viene resuelto en el GameDevLab.
Funcionamiento de los métodos OnTriggerEnter(Collider c) y OnTriggerExit(Collider c)
En el artículo anterior vimos cómo funcionaba el método OnTriggerStay y lo utilizamos para lograr que las estaciones de daño y regeneración afecten la salud del jugador.
Artículo: Método OnTriggerStay.
Para los métodos OnTriggerEnter y OnTriggerExit se necesitan los mismos requisitos, lo que cambia es el momento en el que son ejecutados.
OnTriggerEnter se ejecuta en el momento en el que el jugador entra en el trigger por primera vez, es decir en el frame anterior del juego estaba fuera del trigger y en el frame actual está dentro.
En cambio el método OnTriggerExit se ejecuta en el momento en el que el jugador sale del trigger, es decir en el frame anterior del juego se encontraba dentro del trigger y en el frame actual está fuera.
Teniendo esto en mente, lo que podemos hacer es que la puerta se abra en el método OnTriggerEnter y se cierre en el método OnTriggerExit.
Además vamos a comprobar que el tag del Collider que entró en el trigger es igual a «Player», de esa forma sabemos que se trata del jugador. En la siguiente figura se muestra la resolución.
Conclusión
Los métodos OnTriggerEnter y OnTriggerEnter nos sirven para detectar GameObjects que entran en cierta región, esto tiene un sinnúmero de aplicaciones, por ejemplo activar cinemáticas, mecanismos, permitirnos realizar ciertas acciones sólo cuando estamos en cierta región, etcétera.
A diferencia del método OnTriggerStay, estos métodos se ejecutan una sola vez cuando ocurre una de las situaciones antes mencionadas.