La secuencia de salto en Unity puede quedar fluida y precisa con un buen control del grafo de animaciones. Aquí verás cómo dividir la animación de salto, ajustar loop time y speed, y configurar transiciones con Mecanim y Animator para lograr un resultado natural y consistente.
¿Cómo organizar las animaciones de salto en Unity con Animator y Mecanim?
Dividir la animación de salto mejora el control del tiempo y la continuidad visual. El grafo de animaciones se amplía desde un único estado de salto a tres: jump up, jump air y jump down. Cada una funciona sin bucle para evitar repeticiones indeseadas y ganar precisión en la transición entre estados.
¿Por qué dividir jump en jump up, jump air y jump down?
Más control del tiempo: cada fase del salto tiene su propio ritmo.
Dos frames mínimos: una animación necesita al menos dos frames para existir.
Repetir un frame para enganchar: se reutiliza el frame final de una fase como inicio de la siguiente, logrando continuidad perfecta.
Evitar poses no deseadas: se prescinde del primer sprite del salto cuando la pose no aporta al movimiento.
Desactivar loop time: a diferencia de run o die, estas tres animaciones deben ir sin bucle para no ciclarse.
¿Qué cambios aplicar al método IsTouchInTheGround?
Se retiran las líneas que activaban o desactivaban el Animator por código. Esto evita forzar el componente y delega el flujo a las transiciones del grafo.
// En IsTouchInTheGround():// animator.enabled = true;// animator.enabled = false;
¿Qué transiciones y condiciones mejoran el control del estado?
Usar condiciones lógicas solo donde aportan y confiar en el exit time cuando toca simplifica el grafo. Así, el movimiento se siente natural y predecible, y el retorno a run sucede justo al tocar suelo.
¿Cómo usar isOnTheGround e isAlive en transiciones?
De run a jump up cuando isOnTheGround = false.
De jump up a jump air por tiempo de salida, sin condición.
De jump air a jump down también por tiempo de salida.
De jump down a run cuando isOnTheGround = true.
Desde cualquier estado de salto a die cuando isAlive = false.
¿Qué rol tiene el exit time y el modo bucle?
exit time define cuándo termina una animación y dispara la transición automáticamente.
loop time desactivado en jump up, jump air y jump down evita ciclos y garantiza que la cadena avance.
loop time activado en run y die sigue siendo válido, pues son animaciones continuas por naturaleza.
¿Cómo ajustar speed para que el salto se sienta natural?
El parámetro speed de cada estado permite sincronizar la percepción del movimiento con la física y la intención visual. Si notas desfase, modifica la velocidad en cada fase del salto sin tocar el resto del grafo.
¿Qué valores de speed conviene probar?
1: velocidad normal.
2: el doble de rápido.
3: el triple de rápido.
0.5: a la mitad, más pausado.
¿Cómo validar el resultado en tiempo de ejecución?
Presiona play: el personaje cae y aterriza.
Salta: se ejecuta la secuencia de jump up → jump air → jump down sin condiciones intermedias.
Observa el último frame del salto: permanece visible el tiempo configurado antes de volver a run.
Ajusta speed por estado si percibes desincronización.
Habilidades y conceptos practicados: configuración de grafo en Animator, control de Mecanim, diseño de estados y transiciones con exit time, gestión de loop time, manipulación de sprites y frames mínimos por animación, y uso de parámetros booleanos (isOnTheGround, isAlive) para lógica de juego.
¿Qué ajustes de speed y transiciones te dieron mejor resultado en tu salto? Compártelo en comentarios y cuéntanos por qué.
Desactivando Loop
Velocidad 0.2
Añadiendo nos sprites mas
Yo pensé en simplemente cambiar algunos sprites y quitar el loop :|
Amazing.
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);
^
no hice mas grafos de animacion, con el mismo amplie la animacion
Mira este es mi resultadoi
Mi solución fue definir 3 estados de animaciones y pasar un parámetro como jumpVelocity de tipo float, de ahí definí 3 estados:
jumpVelocity > 1
jumpVelocity < 2 y jumpVelocity < -2
jumpVelocity < 2.1
isOnTheGround false en todas.
Y de ahi
Animator.setFloat(“jumpVelocity”, rigidBody.velocity.y)
En el estado 2 seria asi: jumpVelocity < 2 y jumpVelocity > -2. Eso quiere decir que el jugador esta en el estado intermedio de donde debe cambiar de la animacion de jumpUp a jumpDown (es decir que esta en jumpMid)
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.
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" 🤣
si se puede, click derecho sobre el sprite => create => animation
Mi solución:
1. Dividir la animación en dos partes: **Jump **y Fall2. Crear un parámetro booleano en el controlador de animación de Player3. 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
6. Actualizar las transiciones en el Animator y la velocidad de las animaciones
Así me quedó:
Solución reto
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
Siento que mi personaje dura demasiado en el sprite cuando cae con los brazos arriba, cual seria la mejor forma de regularlo?
Como puedo quitar una condición a una animación si la agregue por error
Hola compañero, lo puedes hacer de la siguien manera:
Dando click derecho sobre el símbolo de menos.
por que me sale este errir
SerializedObjectNotCreatableException: Object at index 0 is null
UnityEditor.Editor.CreateSerializedObject () (at /home/bokken/build/output/unity/unity/Editor/Mono/Inspector/Editor.cs:668)
UnityEditor.Editor.GetSerializedObjectInternal () (at /home/bokken/build/output/unity/unity/Editor/Mono/Inspector/Editor.cs:641)
UnityEditor.Editor.get_serializedObject () (at /home/bokken/build/output/unity/unity/Editor/Mono/Inspector/Editor.cs:538)
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