Desactivando Loop
Velocidad 0.2
Añadiendo nos sprites mas
El personaje y el controlador
Introducción: De la idea al desarrollo
Estructura de carpetas en Unity
Assets, Game Objects y Sprite Atlas
Animaciones desde un sprite map
Animation Controller y Transiciones
Plataformas y gravedad
Física en Unity
El script de control
Programando funciones en C# y Unity: Jump
Detectar el suelo con Raycast
Herramientas de debugging visual
Cambiar las animaciones según los estados
Reto: Terminando nuestras animaciones
Solución del reto
Hacer que el personaje camine
El manager del videojuego
Cómo funciona el Game Manager
El Singleton
El modo de juego
Input manager y juegos multiplataforma
Corrección del Bug del salto
La zona de muerte
Reiniciar la partida
Corrigiendo los bugs al reiniciar nuestro juego
Diseño procedural de niveles 2D
El diseño de niveles a mano
Configurando nuestros assets para el diseño procedural
Generación procedural de niveles
Creando la zona que eliminará bloques del nivel excedentes
Añadir un nuevo bloque de forma aleatoria
La cámara que sigue al jugador
Destrucción de bloques antiguos
Terminando de programar la destrucción de bloques antiguos
Solucionando el salto de la cámara al reiniciar el juego
HUD, menús y gameplay
El canvas en Unity
Uso de botones para crear un menú
La lógica de los menús
Ejercicio: Preparando el menú del juego
Programando el menú del juego
Los coleccionables del juego
Actualizar UI de coleccionables
Iniciando con pociones y maná
Pociones de vida y maná
Programando las barras de vida y maná
Calculando los puntajes con la distancia y el tiempo de juego
La lógica del maná
Enemigos y dificultad
Plataformas móviles
Iniciar movimiento de la plataforma con trigger
Enemigos móviles
Enemigos móviles: preparando nuestro enemigo para girar
Enemigos móviles: programando que gire al chocar
Arreglando el collider de nuestra roca
Programando la condición de muerte del personaje
Añadiendo música de fondo a nuestro videojuego
Añadiendo efectos de sonido y cierre del curso
You don't have access to this class
Keep learning! Join and start boosting your career
When we develop a video game, one of the keys is to make the characters have fluid and natural animations. This becomes crucial in actions like jumping, where the transition between states must be clear and effective. In this section, I will explain how to achieve smooth transitions through the animation graph in Unity, using the Mechanim and Animator tools.
Building an effective sequence of animations is based on the narrative of the character's journey in the air. In this process:
Disable loops: To ensure that animations do not repeat endlessly, such as jump, run, or die, disable the loop property on jump animations such as jump up, jump air, and jump down.
Define transitions: From "run" transitions to "jump up", making the value of "isOnTheGround" false. Between "jump up" and "jump air", no specific condition is required, just use the default exit time. This logic is maintained between "jump air" and "jump down", ensuring smooth transitions.
Return conditions: Once on the ground, with "isOnTheGround" true, the character returns to "run". Also, for each jump state, it can transition to "die" if "isAlive" is false.
The strategic use of frames defines a successful animation. Here I show you how you can maximize their efficiency:
Necessary frames: Every animation needs at least two frames to be considered an animation. Therefore, reusing frames, such as using the fifth frame again, helps to complete the sequence and link one animation to the other without abrupt cuts.
Speed adjustment: You can customize the speed by adapting the "speed" parameter. For a smoother animation, consider these settings:
speed = 1
(Normal)speed = 2
(Twice as fast)speed = 0.5
(Slower)These changes allow you to control and fine-tune the rhythm of the animations according to the character's action.
To see the impact of your settings:
In conclusion, the correct implementation of animations in Unity can make the difference between a game that feels amateurish and one that offers a smooth and professional experience. Continue exploring and experimenting with these tools to become a master of game animation. Go ahead!
Contributions 30
Questions 5
Desactivando Loop
Velocidad 0.2
Añadiendo nos sprites mas
yo hice esta solucion, modifique la animacion para que fuera mas lenta, despues
en el codigo meti en el update esto
animator.SetBool(STATE_IS_JUMPING, true);
^
Mi solución fue definir 3 estados de animaciones y pasar un parámetro como jumpVelocity de tipo float, de ahí definí 3 estados:
isOnTheGround false en todas.
Y de ahi
Animator.setFloat(“jumpVelocity”, rigidBody.velocity.y)
Lo solucioné utilizando un parametro boolean en el Animator, llamado isFalling, este se activa cuando la velocidad del RigidBody2D en su eje Y es menor a 0.
bool isFalling(){
if (rigid.velocity.y < 0.5f)
return true;
else
return false;
}
No se complico mucho la vida y era mas facil desactivar el Loop time desde el principio y en el Animator alargar el tiempo entre cada movimiento?
Hice otra animacion de la caida y que se active unicamente cuando la velocidad sea negativa
En la clase anterior: "Al dividir el salto, para el jump del medio solo va 1 sprite"
En esta clase: “No se puede hacer una animación con 1 sprite” 🤣
Mi solución:
1. Dividir la animación en dos partes: **Jump **y Fall
2. Crear un parámetro booleano en el controlador de animación de Player
3. Cambiar la animación de entrada por la de **Fall **(ya que el PJ siempre inicia cayendo)
4. Agregar una función para verificar cuando el PJ está cayendo
bool IsFalling()
{
return rigidBody.velocity.y < 0;
}
5. Agregar en el método Update ésta línea:
animator.SetBool(STATE_IS_FALLING, IsFalling());
6. Inicializar en el método Start los booleanos isFalling y isOnTheGround
animator.SetBool(STATE_ON_THE_GROUND, false);
animator.SetBool(STATE_IS_FALLING, true);
6. Actualizar las transiciones en el Animator y la velocidad de las animaciones
Así me quedó:
nota de experiencia propia.
hola les recomiendo que se arriesguen a equivocarse y no vean este video directamente e intenten encontrar la respuesta
yo probe de dos formas, con la misma animación le quite el Loop y la alargue un poco para que se viera mejor cada frame, e hice el reto y cree 3 animaciones de saltos y las uni con una condicion booleana
Con este reto se puede profundizar con la implementación de la ventana de animator recordando la creación de parametros, la ejecución de transiciones y los parametros de las animaciones en el inspector.
A su vez, aprender a utilizar la ventana animation para la creación y edicion de nuevos clips para unirlos a la animacion del personaje
Sí se pueden crear animaciones con un solo sprite. Se debe crear en la ventana de animation del personaje y te da un timeline vació donde puedes arrastrar los sprites (o EL sprite). Para abrir esa ventana denle doble click a una de sus animaciones ya hechas.
mi personaje es una bolita al saltar solo hace 3 sprites con quitar el loop quedo bien
Esta solución es mas fácil de lo que creía
El sprite del inicio es simplemente la animación Idle
Yo pensé en simplemente cambiar algunos sprites y quitar el loop 😐
Simple, Hago la animacion más lenta y le desactivo el looptime Xd
Mi solución es la siguiente:
Es similar a la del profesor, pero también hay una transisión de la animación de caminar a la última animación del estado porque un personaje puede bajar de una plataforma y su animación debería ser esa última sección del salto sin el cominezo ni el medio.
También puse la transición de muerte desde el Any State al Die State para mejorar la lectura del grafo.
Mi solucion fue sencilla usando el Animator sin usar codigo. Es una solucion que cabe en este caso.
¿Alguien sabe quitar eso? uso visual Studio Code
No entiendo porque no me sale, fluido, se demora en hacer las animaciones cuando salta
hice tres animaciones y disminui la velocidad de las animaciones 
{
anim.SetFloat(STATE_VELOCITY_UP, playerRigidBody.velocity.y);
}
Mi solución fue agregar esta linea de codigo
if((rigigbody.velocity.y == 0) && isTouchingTheGround())
{
animator.SetBool(STATE_ONTHEGROUND, true);
}
en la cual detecta si la velocidad en Y es mayor a 0 y al mismo tiempo si esta tocando el suelo con el metodo ya creado, si es verdad cambia el valor de la variable isOnTheGround a true, lo que inicia la animación de correr nuevamente.
Lo que hize fue crear las tres animaciones con las transiciones y todo, pero en la animacion de muerte se queda en un loop, si alguien me ayuda?
yo también solo desactive el loop time y le baje la velocidad a las animaciones
donde se encuentra el loop time?
Want to see more contributions, questions and answers from the community?