Para evitar que el conejo por un instante parezca que mira hacia otra direccion antes de quedarse quieto podemos poner el parámetro “Transition Duratior” de las transiciones del animator en 0.
Introducción
Game Design del juego
La estructura y assets de un proyecto en Unity
Convirtiendo nuestros assets en Tiles
Tilemaps y creación del escenario
Bonus: FastForward de la creación del escenario, sorting layers y creación de colliders
Acá encontrarás los archivos de este curso
Personaje principal: Movimiento y Animaciones
El jugador y el movimiento
Creando nuestra primera animación
Creando el grafo de animaciones
Usando un árbol de animaciones
Mostrando la solución del desafío e implementando transición entre blended trees
Programando una cámara que siga al jugador
Corrección del bug gráfico
límites del escenario, rigid bodies
Ejercicio: diseño de interiores
Escenarios Avanzados
Transiciones entre escenas
Mantener Player y Camera entre escenas
Spawning Points: programando que el jugador y la cámara aparezcan en el lugar correcto al cambiar de escena
Agregando Identificadores a nuestros Spawning Points para controlar mejor el flujo de nuestro juego
Enemigos Avanzados
Creando nuestro enemigo
Programando las físicas y el patrullaje del enemigo
Generando movimiento completamente aleatorio
Programando el ataque del enemigo
Crear Manager de Health del Player
Crear armas
Programando el ataque del Player con arma
Mover la espada al caminar
Creando el ataque con espada
Ejecutando el ataque con un botón
Movimiento en diagonal
Optimizando nuestro player controller
Ataque mejorado
Uso de partículas
Añadir el daño del enemigo en batalla
Programando los contadores de vida del enemigo
Colocando más info de UI en pantalla
Script de la vida
Personaje principal avanzado
Añadir el daño del personaje (ejercicio)
Sistema de puntos de experiencia para nuestro personaje principal
Level Up!
Level Up! Defensa y Reto Final del Módulo: Stats de los enemigos
Creando un NPC
Limitar el movimiento de nuestro NPC
Creando una pantalla de diálogos para nuestro RPG
El diálogo del NPC
Múltiples líneas de diálogo
Parar el NPC durante el diálogo
Parar el personaje durante el diálogo
Quests
La estructura de una quest
Quest 1: Ir a un lugar
Quest 2: Encontrar un objeto
Quest 3: Matar enemigos
Revisión de bugs
Mantener la cámara dentro del escenario
El problema al cambiar de escena
Audio
Agregando SFX a nuestro videojuego
Agregando música a nuestro videojuego
Ajustar volúmen del audio de cada uno de los efectos de sonido
Creando un VolumeManager
Agregando economía a nuestro juego y cierre
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
En el fascinante mundo del desarrollo de videojuegos, las animaciones juegan un papel crucial para dotar de vida a los personajes. Un aspecto fundamental es cómo gestionar las transiciones entre diferentes estados de animación de manera suave. Aquí te mostraré cómo hacerlo a través de un enfoque práctico en Unity, utilizando variables y blend trees.
Un blend tree es un nodo en un controlador de animaciones que fusiona múltiples animaciones basándose en parámetros. Esto permite transiciones suaves entre animaciones al cambiar entre posiciones o acciones.
Pasos a seguir:
player idle
debe manejar estados como facing right
, facing left
, facing up
y facing down
.last horizontal
y last vertical
para determinar la dirección de la mirada del personaje cuando está quieto.player idle
como estado predeterminado.player idle
y player movement
controladas por la variable booleana walking
.idle
a movement
debe activarse cuando walking
sea verdadero.movement
a idle
se activa cuando walking
es falso.exit time
y la duración fija de las animaciones para resultados más fluidos.Ahora que tienes configuradas las transiciones de animación, es crucial que el controlador del jugador actualice los parámetros de Animator en tiempo real para reflejar correctamente las acciones del jugador.
Implementación en código:
// Variables necesarias
private bool walking = false;
public Vector2 lastMovement = Vector2.zero;
// Constantes para Animator
private const string lastHorizontal = "LastHorizontal";
private const string lastVertical = "LastVertical";
private const string walkingState = "WalkingState";
// En el método Update
void Update()
{
walking = false;
// Comprobación de movimiento
float horizontalInput = Input.GetAxisRaw("Horizontal");
if (Mathf.Abs(horizontalInput) > 0.5f)
{
walking = true;
lastMovement = new Vector2(horizontalInput, 0);
}
float verticalInput = Input.GetAxisRaw("Vertical");
if (Mathf.Abs(verticalInput) > 0.5f)
{
walking = true;
lastMovement = new Vector2(0, verticalInput);
}
// Notificación al Animator
animator.SetBool(walkingState, walking);
animator.SetFloat(lastHorizontal, lastMovement.x);
animator.SetFloat(lastVertical, lastMovement.y);
}
A veces, los sprites pueden no estar asignados correctamente, lo que afecta a la animación deseada. Asegúrate de que las animaciones se vinculen adecuadamente al personaje.
Verificación:
player15
.player0
.player5
y player10
.Si notas un comportamiento inesperado, revisa y reasigna los sprites necesarios.
El manejo de animaciones en Unity va más allá de configurar un par de transiciones. Es un proceso integral que incluye:
Ahora, con esta guía, estás listo para implementar y mejorar las animaciones de tus personajes en Unity, creando experiencias de juego más ricas y fluidas. ¡Sigue explorando y perfeccionando tus habilidades en animación!
Aportes 10
Preguntas 2
Para evitar que el conejo por un instante parezca que mira hacia otra direccion antes de quedarse quieto podemos poner el parámetro “Transition Duratior” de las transiciones del animator en 0.
Cuando muevo el Jugador hacia la izquierda, arriba o abajo, al final mira a la derecha antes de voltear, Tengo al Conejo Jackson? 🧟♂️🧟♂️🧟♂️
Aquí con los cambios agregados en esta clase:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float speed = 4.0f;
private bool walking = false;
public Vector2 lastMovement = Vector2.zero;
private const string horizontal = "Horizontal";
private const string vertical = "Vertical";
private const string lastHorizontal = "LastHorizontal";
private const string lastVertical = "LastVertical";
private const string walkingState = "Walking";
private Animator animator;
// Start is called before the first frame update
void Start()
{
animator = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
// s = v*t;
walking = false;
//Movimiento horizontal
if(Mathf.Abs(Input.GetAxisRaw(horizontal))>0.5f){
this.transform.Translate(new Vector3(Input.GetAxisRaw(horizontal)
*speed*Time.deltaTime,0,0));
walking = true;
lastMovement = new Vector2(Input.GetAxisRaw(horizontal),0);
}
//Movimiento vertical
if(Mathf.Abs(Input.GetAxisRaw(vertical))>0.5f){
this.transform.Translate(new Vector3(0,Input.GetAxisRaw(vertical)
*speed*Time.deltaTime,0));
walking = true;
lastMovement = new Vector2(0,Input.GetAxisRaw(vertical));
}
animator.SetFloat(horizontal, Input.GetAxisRaw(horizontal));
animator.SetFloat(vertical, Input.GetAxisRaw(vertical));
animator.SetBool(walkingState, walking);
animator.SetFloat(lastHorizontal, lastMovement.x);
animator.SetFloat(lastVertical, lastMovement.y);
}
}
Muy importante el repasar todos estos puntos antes de seguir con las clases, puesto que son muchos parámetros en tomar en cuenta, les invito a repasar un poco y entender realmente cómo funciona.😄
IMPORTANTE !
las constantes tipo string deben asignarse de igual forma como lo asignaron en los parametros del animator del player, no me funcionaba por una espacio, revisar muy bien.
Para evitar ese flick del personaje ponga el “Transition Duratior” en 0 de las flechas.
Genial
tengo un extraño comportamiento, he seguido todo al pie de la letra, pero cuando se mueve de izquierda a derecha solo se puede ver el frame sin animacion
Mi personaje siempre queda Player_Facing_Up, a alguien le paso algo similar? Saben donde puede estar el problema?
Que profesorazo!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?