unity3d
Animación de la unidad
Buscar..
Animación básica para correr
Este código muestra un ejemplo simple de animación en Unity.
Para este ejemplo, deberías tener 2 clips de animación; Ejecutar y inactivo. Esas animaciones deben ser movimientos Stand-In-Place. Una vez que se seleccionan los clips de animación, crear un controlador de animador. Agregue este controlador al jugador o al objeto del juego que desea animar.
Abra la ventana del animador desde la opción de Windows. Arrastre los 2 clips de animación a la ventana del animador y se crearán 2 estados. Una vez creado, use la pestaña de parámetros de la izquierda para agregar 2 parámetros, ambos como bool. Nombre uno como "PerformRun" y otro como "PerformIdle". Establezca "PerformIdle" en true.
Realice transiciones desde el estado inactivo a Ejecutar y Ejecutar a inactivo (consulte la imagen). Haga clic en Inactivo-> Ejecutar transición y en la ventana del Inspector, deseleccione HasExit. Haz lo mismo para la otra transición. Para Inactivo-> Ejecutar transición, agregue una condición: PerformIdle. Para Ejecutar-> Inactivo, agregue una condición: PerformRun. Agregue el script C # dado abajo al objeto del juego. Debe ejecutarse con animación usando el botón Arriba y rotar con los botones Izquierda y Derecha.
using UnityEngine;
using System.Collections;
public class RootMotion : MonoBehaviour {
//Public Variables
[Header("Transform Variables")]
public float RunSpeed = 0.1f;
public float TurnSpeed = 6.0f;
Animator animator;
void Start()
{
/**
* Initialize the animator that is attached on the current game object i.e. on which you will attach this script.
*/
animator = GetComponent<Animator>();
}
void Update()
{
/**
* The Update() function will get the bool parameters from the animator state machine and set the values provided by the user.
* Here, I have only added animation for Run and Idle. When the Up key is pressed, Run animation is played. When we let go, Idle is played.
*/
if (Input.GetKey (KeyCode.UpArrow)) {
animator.SetBool ("PerformRun", true);
animator.SetBool ("PerformIdle", false);
} else {
animator.SetBool ("PerformRun", false);
animator.SetBool ("PerformIdle", true);
}
}
void OnAnimatorMove()
{
/**
* OnAnimatorMove() function will shadow the "Apply Root Motion" on the animator. Your game objects psoition will now be determined
* using this fucntion.
*/
if (Input.GetKey (KeyCode.UpArrow)){
transform.Translate (Vector3.forward * RunSpeed);
if (Input.GetKey (KeyCode.RightArrow)) {
transform.Rotate (Vector3.up * Time.deltaTime * TurnSpeed);
}
else if (Input.GetKey (KeyCode.LeftArrow)) {
transform.Rotate (-Vector3.up * Time.deltaTime * TurnSpeed);
}
}
}
}
Creación y uso de clips de animación
Este ejemplo mostrará cómo hacer y usar clips de animación para objetos de juego o jugadores.
Tenga en cuenta que los modelos utilizados en este ejemplo se descargan desde Unity Asset Store. El reproductor se descargó desde el siguiente enlace: https://www.assetstore.unity3d.com/en/#!/content/21874 .
Para crear animaciones, primero abra la ventana de animación. Puede abrirlo haciendo clic en Ventana y Seleccionar animación o presione Ctrl + 6. Seleccione el objeto del juego al que desea aplicar el clip de animación, desde la ventana de jerarquía, y luego haga clic en el botón Crear en la ventana de animación.
Nombra tu animación (como IdlePlayer, SprintPlayer, DyingPlayer, etc.) y guárdala. Ahora, desde la ventana de animación, haga clic en el botón Agregar propiedad. Esto te permitirá cambiar la propiedad del objeto o jugador del juego con respecto al tiempo. Esto puede incluir Transformaciones como rotación, posición y escala y cualquier otra propiedad que esté asociada al objeto del juego, por ejemplo, Colisionador, Representador de malla, etc.
Para crear una animación en ejecución para el objeto del juego, necesitarás un modelo 3D humanoide. Puede descargar el modelo desde el enlace de arriba. Siga los pasos anteriores para crear una nueva animación. Agregue una propiedad de transformación y seleccione Rotación para una de las partes del personaje.
En este momento, su botón de Juego y los valores de Rotación en la propiedad del objeto del juego se habrían puesto rojos. Haga clic en la flecha desplegable para ver los valores de rotación X, Y y Z. El tiempo de animación predeterminado se establece en 1 segundo. Las animaciones utilizan fotogramas clave para interpolar entre valores. Para animar, agregue claves en diferentes puntos en el tiempo y cambie los valores de rotación desde la ventana del Inspector. Por ejemplo, el valor de rotación en el tiempo 0.0s puede ser 0.0. En el tiempo 0.5s, el valor puede ser 20.0 para X. En el tiempo 1.0s el valor puede ser 0.0. Podemos terminar nuestra animación en 1.0s.
La duración de la animación depende de las últimas teclas que agregue a la animación. Puede agregar más teclas para que la interpolación sea más suave.
Animación 2D Sprite
La animación Sprite consiste en mostrar una secuencia existente de imágenes o marcos.
Primero importa una secuencia de imágenes a la carpeta de activos. Cree algunas imágenes desde cero o descargue algunas desde Asset Store. (Este ejemplo utiliza este activo gratis ).
Arrastre cada imagen individual de una sola animación desde la carpeta de activos a la vista de escena. Unity mostrará un diálogo para nombrar el nuevo clip de animación.
Este es un atajo útil para:
- creando nuevos objetos de juego
- asignando dos componentes (un Sprite Renderer y un Animator)
- creando controladores de animación (y vinculando el nuevo componente Animator a ellos)
- Creando clips de animación con los marcos seleccionados.
Previsualice la reproducción en la pestaña de animación haciendo clic en Reproducir:
Se puede usar el mismo método para crear nuevas animaciones para el mismo objeto de juego, y luego eliminar el nuevo objeto de juego y el controlador de animación. Agregue el nuevo clip de animación al controlador de animación de ese objeto de la misma manera que con la animación 3D.
Curvas de animacion
Las curvas de animación le permiten cambiar un parámetro flotante mientras se reproduce la animación. Por ejemplo, si hay una animación de 60 segundos de duración y desea un valor / parámetro flotante, llámelo X, para variar a través de la animación (como en el tiempo de animación = 0.0s; X = 0.0, en el tiempo de animación = 30.0s; X = 1.0, en tiempo de animación = 60.0s; X = 0.0).
Una vez que tenga el valor flotante, puede usarlo para traducir, rotar, escalar o usarlo de cualquier otra forma.
Para mi ejemplo, mostraré un objeto de juego de jugador en ejecución. Cuando se reproduce la animación para correr, la velocidad de traducción del jugador debe aumentar a medida que avanza la animación. Cuando la animación llega a su fin, la velocidad de traducción debe disminuir.
Tengo un clip de animación en ejecución creado. Seleccione el clip y luego en la ventana del inspector, haga clic en Editar.
Una vez allí, desplácese hasta Curvas. Haga clic en el signo + para agregar una curva. Nombra la curva, por ejemplo, ForwardRunCurve. Haga clic en la curva en miniatura a la derecha. Se abrirá una pequeña ventana con una curva predeterminada en ella.
Queremos una curva en forma parabólica donde sube y luego cae. Por defecto, hay 2 puntos en la línea. Puedes agregar más puntos haciendo doble clic en la curva. Arrastre los puntos para crear una forma similar a la siguiente.
En la ventana del animador, agregue el clip en ejecución. Además, agregue un parámetro flotante con el mismo nombre que la curva, es decir, ForwardRunCurve.
Cuando se reproduce la animación, el valor flotante cambiará de acuerdo con la curva. El siguiente código mostrará cómo usar el valor flotante:
using UnityEngine;
using System.Collections;
public class RunAnimation : MonoBehaviour {
Animator animator;
float curveValue;
void Start()
{
animator = GetComponent<Animator>();
}
void Update()
{
curveValue = animator.GetFloat("ForwardRunCurve");
transform.Translate (Vector3.forward * curveValue);
}
}
La variable curveValue mantiene el valor de la curva (ForwardRunCruve) en un momento dado. Estamos utilizando ese valor para cambiar la velocidad de la traducción. Puedes adjuntar este script al objeto del juego del jugador.