Diferencia entre revisiones de «Unity Animaciones»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 182: Línea 182:
  
  
 +
 +
<br />
 +
==Analizando la máquina de estados==
 +
 +
* Más información [https://docs.unity3d.com/Manual/AnimationParameters.html en este enlace].
 +
 +
 +
* Como ya comentamos anteriormente el Animator Controller permite tener una máquina de estados. En cada estado vamos a poder 'asociar' una animación y vamos a poder pasar de un estado a otro en base a diferentes tipos de condiciones.
 +
: Esas condiciones las vamos a poder modificar por medio de scripts.
 +
 +
 +
* Imaginemos un caso típico en el que en base a la vida que le queda al zombie, este se muere.
 +
: Para ello vamos a necesitar un parámetro vida o bien una variable de tipo boolean que indique cuando el zombie ha muerto.
 +
: Vamos a optar por la variable de tipo boolean.
 +
: Podríamos optar por el parámetro de vida si por ejemplo, al tener diferentes valores, quisiéramos diferentes animaciones. Imaginar que en caso de que le quede 5 de vida, pasaríamos a que el zombie se arrastrara. Y en caso de llegar a 0 moriría.
 +
 +
 +
* Estando en el Animator Controller del Zombie podemos ver los tipos de parámetros que podemos crear:
 +
[[Imagen:Unity3d_animacion_38.jpg|500px|center]]
 +
 +
:* Float: Una variable de tipo Flotante.
 +
:* Int: Una variable de tipo Entero.
 +
:* Bool: Una variable de tipo Booleana.
 +
:* Trigger: Viene a ser una variable de tipo Booleana (admite valores true/false) con la diferencia que una vez la transición se ha producido su valor vuelve a valer false automáticamente.
 +
:: Un ejemplo de uso de este tipo de variables puede ser cuando estamos disparando un arma y se acaba la munición. En ese momento debemos de pasar a la animación de cargar el arma (sería poniendo a true una variable de este tipo) e inmediatamente después continuaríamos con la animación de disparar. Al pasar a la animación de disparar, la variable Trigger ya valdría false otra vez.
  
  
<br />
+
* Veamos un ejemplo práctico.
 +
<gallery caption="Creando un parámetro en la máquina de estados" widths="350" heights="300px" perrow="2">
 +
Image:Unity3d_animacion_39.jpg| Dentro del animator controller del zombie, creamos un nuevo parámetro de tipo booleano. Le damos de nombre '''muerto'''. Podemos ver a la derecha del parámetro un check que podemos presionar cambiando su valor por defecto.
 +
Image:Unity3d_animacion_40.jpg| Arrastramos la animación del Zombie Death a la máquina de estados y le cambiamos el nombre.
 +
Image:Unity3d_animacion_41.jpg| Ahora debemos de plantearnos '''¿ cuando el zombie pasa al estado de muerto ?'''. La respuesta es obvia, cuando pierde toda su vida. Pero '''<u>¿Desde qué estado puede pasar a muerto ?</u>'''. La respuesta también es obvia. '''DESDE CUALQUIER ESTADO'''. Es decir, desde cualquier estado el Zombie puede morir. Por tanto necesitamos crear una transición desde '''AnyState''' a '''Zombie Death'''. Para ello pulsamos el botón derecho del ratón sobre el estado 'Any State' y escogemos la opción '''Make Transition'''.
 +
Image:Unity3d_animacion_42.jpg| Y pulsamos sobre el estado 'Zombie Death', apareciendo una línea con una flecha indicando que vamos a poder pasar del estado 'AnyState' al estado 'Zombie Death'.
 +
Image:Unity3d_animacion_43.jpg| Si pulsamos sobre la transición creada vemos ver en la parte derecha como se produce el cambio desde un estado al otro, pudiendo hacer una previsualización y cambiando varios parámetros de la transición.
 +
Image:Unity3d_animacion_44.jpg| Si pulsamos sobre el <u>símbolo +</u> de la '''sección Conditions''' aparecerá el único parámetro creado hasta ahora, indicando el valor que debe de tomar para pasar de una transición a otra.
 +
Image:Unity3d_animacion_45.jpg| Si ejecutamos el juego y distribuimos las ventanas para poder ver el Animator Controller, podemos observar como no para de ejecutar la animación del estado 'Zombie Parado'.
 +
Image:Unity3d_animacion_46.jpg| Si pulsamos sobre la variable 'Muerto' podemos ver como se cambia de estado y la animación se reproduce.
 +
</gallery>
 +
 
 +
: Vamos a crear una variable booleana que indique
  
 
=Creando animaciones propias=
 
=Creando animaciones propias=

Revisión del 17:00 7 ene 2019

Introducción

  • Más información en:


  • En Unity podemos gestionar animaciones que vengan ya incorporadas a los modelos importados o bien podemos realizar nuestras 'propias animaciones'.
Cada una de las animaciones conforma lo que se denomina Clip en Unity.


  • Las animaciones propias son animaciones consistentes en modificar alguno de los parámetros que conformar el transform de cada GameObject.
Es decir podemos modificar:
  • Posición
  • Escala
  • Rotación
Estas modificaciones se producirán a lo largo de un período de tiempo y que conformará la animación.


Por ejemplo:
  • Podemos tener un soldado que siempre se esté moviendo de izquierda a derecha sin parar y que se desplace 10 metros.
  • O un pájaro que vuele por la pantalla siguiendo una ruta 'predefinida' y que se repita continuamente.


  • En cuanto a las animaciones ya incorporadas a los modelos, estas animaciones están asociadas a un nombre (por ejemplo, andar, correr,...)
Unity permite crear una máquina de estados en las que cada animación tiene lugar en función del estado en que se encuentre el GameObject. Este pasará de un estado a otro en función de los valores que puedan tomar variables definidas por nosotros.
Unity3d animacion 0.jpg





Importando modelos con animaciones

  • Muchas de las animaciones que vamos a poder utilizar son aquellas en las que el modelo tiene asociado un esqueleto o bones.
Unity3d animacion 0A.jpg
Como vemos en la imagen, la figura 3D tiene asociado un RIG.
Básicamente consiste en asociar a un modelo 3D un conjunto de huesos los cuales están asociados a la figura, de tal forma que al mover dichos huesos, movemos las partes de la figura 3D asociada.
Este tipo de animaciones se denominan Humanoid en Unity y están asociados a un Avatar.
Los modelos que vienen con este tipo de animaciones tienen una pose en T.
Suelen ser todos bípedos y con unas características comunes para que:
  • Los esqueletos y movimientos asociados puedan ser aplicados a cualquier figura 3D con esta forma (retargeting)
  • Permite realizar Inverse Kinematic, es decir, indicar un punto determinado del espacio y hacer que los huesos del esqueleto se muevan correctamente para llegar a ese punto.
Unity3d animacion 0B.jpg



  • Podemos disponer de modelos 3D que no se adaptan a este tipo y que Unity denomina Generic:
Unity3d animacion 0C.jpg
En la imagen tenemos una figura 3D que no responde al tipo de 'Humanoide'.



  • Uno de los sitios que actualmente es gratuito y permite 'asociar' animaciones a modelos 3D es https://www.mixamo.com.
Una vez registrados accederemos a su página que actualmente tiene este aspecto:


  • Indicar que tanto en animaciones como en modelos, podemos filtrar los resultados buscando por palabras claves.
  • Si nos vale alguno de los modelos, veremos a continuación como hacer uso de ellos en Unity.
En el ejemplo siguiente partimos que no nos vale ninguno de los modelos y que utilizamos otro descargado o diseñado por nosotros mismos.
Recordar que esto solo vale para animaciones de tipo 'humanoide' como ya explicamos anteriormente.
  • Actualmente se puede descargar la aplicación Fuse de Adobe que permite diseñar nuestros avatares de forma totalmente personalizable.
Unity3d animacion 14.jpg






Gestionando las animaciones. Animation Controller


Creando un Animation Controller. Animación inicial

  • En este punto ya disponemos de 4 modelos con 4 animaciones (Clips).
Unity3d animacion 19A3.jpg


Fijarse que solo en una de ellas se previsualiza el modelo.
Si desplegáis el contenido de cada modelo (presionando la flecha hacia la derecha en cada uno) podéis ver como en todos ellos disponemos de un 'Clip' que viene a ser la animación asociada al mismo.
Unity3d animacion 19A4.jpg


Ahora es necesario gestionar dichas animaciones. Debemos de tener algún mecanismo que nos permite controlar cuando la figura 3D está en una animación o en otra.
Cuando pulsa una tecla quiero que pase de Idle a Walk.
Cuando presiono el botón de disparo quiero un Attack.



  • Al pulsar dos veces sobre el AnimationController (darle un nombre adecuado), accedemos a la máquina de estados:



Reutilizando las animaciones sobre otros modelos

  • Imaginemos que estas mismas animaciones las queremos utilizar con otros 'modelos', en este caso, de tipo 'Humanoide'.




Analizando la máquina de estados


  • Como ya comentamos anteriormente el Animator Controller permite tener una máquina de estados. En cada estado vamos a poder 'asociar' una animación y vamos a poder pasar de un estado a otro en base a diferentes tipos de condiciones.
Esas condiciones las vamos a poder modificar por medio de scripts.


  • Imaginemos un caso típico en el que en base a la vida que le queda al zombie, este se muere.
Para ello vamos a necesitar un parámetro vida o bien una variable de tipo boolean que indique cuando el zombie ha muerto.
Vamos a optar por la variable de tipo boolean.
Podríamos optar por el parámetro de vida si por ejemplo, al tener diferentes valores, quisiéramos diferentes animaciones. Imaginar que en caso de que le quede 5 de vida, pasaríamos a que el zombie se arrastrara. Y en caso de llegar a 0 moriría.


  • Estando en el Animator Controller del Zombie podemos ver los tipos de parámetros que podemos crear:
Unity3d animacion 38.jpg
  • Float: Una variable de tipo Flotante.
  • Int: Una variable de tipo Entero.
  • Bool: Una variable de tipo Booleana.
  • Trigger: Viene a ser una variable de tipo Booleana (admite valores true/false) con la diferencia que una vez la transición se ha producido su valor vuelve a valer false automáticamente.
Un ejemplo de uso de este tipo de variables puede ser cuando estamos disparando un arma y se acaba la munición. En ese momento debemos de pasar a la animación de cargar el arma (sería poniendo a true una variable de este tipo) e inmediatamente después continuaríamos con la animación de disparar. Al pasar a la animación de disparar, la variable Trigger ya valdría false otra vez.


  • Veamos un ejemplo práctico.
Vamos a crear una variable booleana que indique

Creando animaciones propias


-- Ángel D. Fernández González -- (2018).