jairogarcíarincón
Para que el jugador pueda correr, vamos a realizar dos aproximaciones diferentes:
- Que corra con un botón (mayúsculas izquierda)
- Que corra cuando lleve 3 segundos andando
En el primer caso, simplemente, añadiremos a FixedUpdate una condición que triplique la velocidad al darle al botón (y si no está quieto), y ya de paso, asigne a true un booleano para las animaciones:
//Correr con boton
if (Input.GetButton("Fire3") && movimiento != Vector3.zero)
{
velocidad = 0.6f;
animator.SetBool("isRunning", true);
}
else
{
velocidad = 0.2f;
animator.SetBool("isRunning", false);
}
Para el segundo caso, primero debemos inicializar una variable para contar el tiempo transcurrido desde que empieza a saltar:
private float tiempoAndar;
Y a continuación añadir a FixedUpdate el código necesario:
//Correr por tiempo
if(movimientoH != 0 && velocidad == 0.2f || movimientoV != 0 && velocidad == 0.2f)
{
tiempoAndar += Time.deltaTime;
if (tiempoAndar >= 3.0f)
{
velocidad = 0.6f;
animator.SetBool("isRunning", true);
}
}
//Detectar cuando deja de moverse
if (movimiento == Vector3.zero && !Input.GetButton("Fire3"))
{
velocidad = 0.2f;
animator.SetBool("isRunning", false);
tiempoAndar = 0.0f;
}
En cuanto a las animaciones, debemos tener en cuenta que nuestro jugador pasará de andando a corriendo y además podrá saltar mientras corre. Igualmente, puede empezar a correr desde parado, con lo que esto nos obliga a hacer un Animator más complejo:
Además, tal y como hicimos en Andar, debemos poner en Loop nuestra animación de correr (en el modelo). En todas las transiciones, como hemos dicho antes, necesitaremos un nuevo bool llamado isRunning y desactivar Has Exit Time:
Ejercicio propuesto 5
Añade la interactividad necesaria para que el jugador realice las animaciones de pegar y trabajar cuando pulse un botón (desde parado, andando o corriendo). Asegúrate además de que no se desplaza ni rota mientras realiza estas acciones.
Publicado el 21 de Noviembre de 2024
unityanimaciónhumanoide3d