Bienvenido a un nuevo codelab de nuestro curso sobre desarrollo de aplicaciones XR, en esta ocasión vamos a aprender a activar nuestras animaciones cuando algo ocurre en el ambiente. Esperamos que en este Codelab puedas aprender a agregar eventos para desencadenar tus animaciones.

En este Codelab profundizarás lo aprendido en tutoriales previos sobre la Ventana Animation y Componente Animator, donde habías agregado animaciones a un árbol, sobre su escala, movimiento y cambio de color.

En particular, para este ejemplo partiremos del movimiento a un árbol.

En este Codelab aprenderás a agregar un trigger para que la animación solo se active cuando el jugador se aproxime al árbol.

Revisemos el animator del GameObject árbol, para ello, da click en el árbol en la ventana de jerarquía, y abre la ventana del animator en Window > Animation > Animator

En este momento, se encuentran las animaciones Crecer y Balanceo la cual balancea el árbol con sensación de viento.

Ahora, agrega una nueva animación vacía, esto para que el árbol pueda volver a estar quieto una vez el usuario se aleja. Para ello da click derecho > Create State > Empty.

Como aprendimos en anteriores codelabs, es importante dar nombres que hagan referencia a lo que hace la variable, estado o animación. En este caso, ya que el nuevo estado se crea bajo el nombre de New State, se debe cambiar. Puedes ponerle Quieto a dicho estado, ya que es un estado que no va a tener movimiento.

Luego, la vas a conectar con Balanceo en ambos sentidos. Para ello, das click derecho sobre Balanceo y seleccionas Make Transition, lo conectas con tu animación de Quieto, luego haces lo mismo, pero de Quieto hacia Balanceo.

Ahora, en la parte izquierda, en la pestaña de parameters añade un parámetro de tipo Bool, llamada estaCerca, esto para poder activar la animación cuando el usuario esté cerca al árbol.

Posteriormente, da click sobre la flecha que conecta la animación Crecer con Balanceo, allí verás un panel con diversos controles al lado derecho. En Conditions añade el booleano que acabamos de crear, y déjalo en marcado en True.

Realiza esta misma acción con la flecha que va desde Balanceo hacia Quieto, pero marca la condición estaCerca con False. Finalmente, repite el proceso de la flecha que va de Quieto a Balanceo, marca la condición estaCerca con True.

En Unity, un "trigger" (disparador) es un tipo especial de colisionador que detecta la intersección con otros colisionadores. Los triggers se utilizan comúnmente para eventos, como activar animaciones, desencadenar efectos visuales o realizar cambios en la aplicación.

Una vez configurado el animator, debes crear un collider que configuraremos como trigger en el árbol. Con ello, una vez te aproximes al árbol, la animación iniciará. Para colocar el trigger dirígete al GameObject árbol en la ventana de jerarquía y en la ventana inspector selecciona Add Component > Collider > Box Collider.

Luego, verás que se despliega la opción para configurar el collider, así que le vas a dar click en el ícono resaltado en la imagen a continuación.

Luego, vas a escalar el collider hasta que quede rodeando el árbol. Para ello, vas a modificarlo de los pequeños cuadros verdes que salen en el collider. Este debe quedar como se muestra en la siguiente imagen.

Finalmente, vas a marcar la casilla Is Trigger.

Añade un Rigid Body a tu GameObject árbol. Para ello ve a Add Component > Rigid Body.

Luego, asegúrate de que tengas marcadas las opciones tal como se muestra en la siguiente imagen.

Ya tienes el animator y el trigger configurado, ahora, falta vincularlo, esto lo haremos a través de un script. Para ello, en el inspector ve a Add Component > New Script, luego, lo puedes nombrar como "TriggerEvent"

A continuación, en el componente Script en los tres puntos laterales selecciona Edit Script.

Script Trigger Event

Agrega una referencia al animator y declara el booleano que creamos en el animator, esto lo puedes hacer de la siguiente manera.

Ahora, debes crear una función llamada OnTriggerEnter(Collider other). OnTriggerEnter, es un método especial en Unity que se llama automáticamente cuando otro colisionador entra en el trigger asociado a este GameObject. En el parámetro Collider other, other representa el colisionador del objeto que ha entrado en el trigger. Este parámetro proporciona acceso a la información sobre el objeto que ha activado el trigger.

Dentro de la función, debes crear un condicional para que se active la animación a penas se entre en contacto con el Collider. En particular, el objeto con el que vamos a detectar la colisión es "Main Camera" que es la cámara principal dentro del objeto del jugador, es decir, en XR Origin (XR Rig) > Camera Offset > Main Camera.

La función hace lo siguiente:

Ahora, haz una función OnTriggerExit(Collider other). OnTriggerExit, es un método especial en Unity que se llama cuando otro colisionador sale del trigger asociado a este GameObject.

La función hace lo siguiente:

Finalmente, das guardar el script en Visual Studio y regresas a Unity.

En Unity dirígete a la ventana del inspector, el componente del script lo verás de la siguiente manera.

Vamos a vincular el animator del árbol. Para vincular el animator, da click en el ícono del círculo junto a None (Animator) y selecciona el objeto del árbol.

Ahora que ya vinculaste el Script con los objetos en Unity, puedes probar tu animación.

¡Felicidades! Has completado el codelab OnTrigger Event: Activando Animaciones por Script, ahora sabes cómo desencadenar animaciones cuando ocurre un evento en tu aplicación. Te invitamos a seguir explorando y experimentando con Unity.