-
En esta lección nosotros estaremos abordando
-
algunos de los usos más comunes de la clase animator.
-
Para una documentación completa de la clase animator
-
vea el link de documentación abajo.
-
Con el fin de afectar las transiciones entre los estados
-
de un animator controller nosotros necesitamos configurar
-
los parámetros del animator a unos valores apropiados.
-
Para hacer esto nosotros necesitamos utilizar algunas
-
de las funciones de la clase animator.
-
Aquí nosotros tenemos una escena con un modelo Ethan.
-
Ethan tiene un componente animator
-
y un script adjunto llamado Ethan Script.
-
El componente animator está utilizando un
-
controller llamado EthanController.
-
Si abrimos EthanController
-
nosotros podemos ver que hay 4 estados.
-
Idle, Walk, Run y Jump.
-
Adicionalmente hay 2 parámetros.
-
Un float llamado Speed y un
-
trigger llamado Jump.
-
El controller está configurado de tal manera
-
que Ethan hará una transición de Idle a Walk
-
a Run básandose en el parámetro Speed.
-
Además, si el parámetro Jump es activado
-
mientras Ethan está corriendo Ethan va a entrar
-
en un estado Jump.
-
Todas las animaciones del modelo Ethan
-
están controladas por estos 2 parámetros,
-
los cuales nosotros vamos a aprender a controlar
-
con nuestro script de Ethan.
-
Dentro del Ethan Script nosotros primero tenemos que crear
-
una variable animator llamada anim
-
para contener nuestro objeto animator.
-
Nosotros obtenemos una referencia a este objeto animator
-
en el método start escribiendo
-
anim = GetComponent
-
Para más detalles acerca de la función GetComponent
-
vea la lección vinculada abajo.
-
Nuestro animator controller está configurado
-
para que el parámetro speed dicte
-
que animación de movimiento está reproduciéndose.
-
Nosotros podemos utilizar el input del jugador para
-
controlar ese comportamiento.
-
La primera cosa que necesitamos hacer es crear
-
una variable float que llamaremos Move
-
en el método update.
-
Después vamos a establecer la variable Move
-
a que sea igual al input del eje vertical
-
escribiendo Input.GetAxis
-
y en paréntesis nosotros a vamos a parse el string Vertical.
-
Lo que sigue es que queremos pasar el
-
valor de la variable Move al
-
atributo Speed del animator controller.
-
Esto es hecho con la función SetFloat
-
de la clase animator.
-
Nosotros estamos utilizando SetFloat ya que Speed
-
es un parámetro float.
-
Si se le hubiera dado un parámetro Booleano
-
nosotros hubiéramos utilizado SetBool.
-
Si hubiera sido un parámetro trigger nosotros hubieramos
-
utilizado SetTrigger y así.
-
Para cada una de estas funciones hay
-
múltiples maneras en las que pueden ser llamadas.
-
La manera más común es primero pasar
-
el nombre del parámetro que está ajustando
-
como un string.
-
Luego el siguiente elemento es el valor
-
que usted desea que ese parámetro sea.
-
En esta instancia nosotros vamos a llamar el
-
método SetFloat de nuestra variable animator escribiendo
-
anim.SetFloat
-
y luego en paréntesis el string Speed
-
y nuestra variable Move.
-
Devuelta en Unity nosotros podemos correr nuestra escena.
-
Nosotros podemos ver que si presionamos la tecla W
-
o la tecla de arriba, nuestro modelo ahora se mueve.
-
El parámetro Speed y la animación de
-
movimiento reproducida ahora es controlada por el jugador.
-
Pasar un nombre string
-
para el parámetro que deseamos puede ser ineficiente
-
ya que significa que el animator necesita
-
evaluar el string cada vez que es llamado.
-
Una manera más rápida de configurar los valores del parámetro
-
es utilizando hashIDs.
-
Cada string que el animator puede utilizar es
-
dado en un hashID.
-
Este es un valor entero que es único
-
para cada string diferente.
-
Nosotros podemos almacenar este valor y luego
-
configurar los parámetros utilizando este ID más bien.
-
Para hacer esto, primero necesitamos
-
almacenar el valor.
-
Creamps una variable de tipo entero llamada jumpHash
-
para almacenar el hashID.
-
Obtenemos el valor para nuestra variable hash
-
llamando el método estático de la clase animator
-
string to hash.
-
Debido a que este método es estático nosotros podemos accederlo
-
escribiendo Animator.StringToHash.
-
En el paréntesis nosotros pasamos el string
-
que queremos saber su valor hashID:
-
Con el fin de hacer que nuestro modelo salte
-
nosotros necesitaremos configurar el parámetro Jump
-
de tipo trigger en el animator controller.
-
En nuestro caso nosotros queremos hacer que el modelo salte
-
cuando se presione la barra espaciadora.
-
Entonces nosotros comenzáramos escribiendo
-
if Input.GetKeyDown y luego en paréntesis
-
nosotros utilizaremos KeyCode.Space.
-
Dentro de nuestra declaración if nosotros
-
estableceremos el parámetro Jump de tipo trigger utilizando
-
el método anim.SetTrigger.
-
Dentro del paréntesis nosotros vamos a
-
pasar nuestra variable jumpHash.
-
Recuerde que esta variable contiene el
-
hasID de nuestro parámetro Jump.
-
Tenga en cuenta desde que Jump es un trigger
-
nosotros no tenemos que también pasar ese valor.
-
Devuelta en Unity nosotros podemos correr nuestra escena.
-
Tenga en cuenta que mientras nosotros estamos corriendo también
-
podemos presionar la barra espaciadora para saltar.
-
Ahora nosotros hemos utilizado ambos
-
parámetros Speed de tipo float y
-
Jump de tipo trigger para hacer que nuestro modelo
-
sea más dinámico.
-
Ocasionalmente, cuando se está escribiendo la lógica
-
detrás de la animación nosotros queremos
-
encontrar en qué estado el controller está.
-
Digamos por ejemplo que nosotros queremos ser capaces de
-
activar el trigger Jump cuando el modelo
-
está en el estado Run.
-
El animator tiene algunas funciones que podemos llamar
-
para encontrar en qué estado el controller
-
actualmente está.
-
Nosotros podemos hacer esto creando
-
una variable animator state info
-
que llamaremos StateInfo.
-
La clase animator state info
-
almacena el nombre, nombre hash,
-
y varias otras piezas de información
-
acerca del estado.
-
Nosotros estableceremos nuestra variable state info
-
igual a la función anim.GetCurrentAnimatorStateInfo.
-
Dentro del paréntesis nosotros vamos a pasar el indice
-
de la capa que queremos saber más acerca.
-
Dado que se trata de la base layer
-
nosotros vamos a pasar en un 0.
-
Nuevamente nosotros podemos comparar el nombre de los
-
estados de maquina actuales con el string
-
pero ya que es más eficiente comparar
-
hashIDs hagamos esto más bien.
-
Nosotros comenzaremos creando un entero llamado
-
runStateHash y configurándolo a que sea igual a nuestra
-
función Animator.StringToHash .
-
Nosotros vamos a pasar en el paréntesis
-
el string base layer .Run
-
Nosotros tenemos que incluir la base layer.part
-
ya que podemos tener estados con el mismo nombre
-
en diferentes capas.
-
Ahora nosotros podemos modificar nuestra declaración if
-
para también únicamente permitir nuestro modelo saltar
-
si stateInfo.nameHash
-
es igual a nuestra variable runStateHash.