#6 Métodos OnTriggerEnter y OnTriggerExit. [Serie Fundamental de Unity]

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.

Página principal del proyecto

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.

proyecto unity3d, modelo 3d de puerta hecha en blender, laboratorio de programacion
Fig. 1: Estación OnTriggerEnter/Exit del GameDevLab.

Todos los elementos de la estación están contenidos en el GameObject “#6 OnTriggerEnter/Exit”.

Fig. 2: Jerarquía del GameDevLab. Vamos a trabajar con el GameObject “#6 OnTriggerEnter/Exit”.

Este GameObject tiene asignado el Script “OnTriggerEnterExit” que es el que tenemos que completar en esta ocasión.

Fig. 3: Componentes del GameObject “#6 OnTriggerEnter/Exit”. Tenemos asignado el Script a completar en este ejercicio y un Box Collider en modo trigger.

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.

proyecto unity3d, modelo 3d de puerta hecha en blender, laboratorio de programacion, collider
Fig. 4: Box Collider en modo trigger que usaremos para detectar al personaje.

Vamos a utilizar este Collider para resolver el ejercicio.

proyecto unity3d, modelo 3d de puerta hecha en blender, laboratorio de programacion
Fig. 5: Apertura de la puerta una vez que logremos resolver el ejercicio.

proyecto unity3d, modelo 3d de puerta hecha en blender, laboratorio de programacion
Fig. 6: Vista desde el interior de la habitación.

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).

Fig. 7: Script OnTriggerEnterExit sin completar.

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.

Fig. 8: Componentes necesarias para el funcionamiento de los métodos.

Fig. 9: El método OnTriggerEnter se ejecuta automáticamente en el primer frame en el que un collider entra en el trigger.

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.

Fig. 10: El método OnTriggerExit se ejecuta automáticamente en el primer frame en el que un collider sale del trigger al que previamente había entrado.

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.

Fig. 11: Resumen del funcionamiento de los métodos.

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.

Fig. 12: Resolución del ejercicio dentro de la región definida por los comentarios en verde.

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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *