Yone Moreno Jiménez
Yone Moreno Jiménez
Diana Carolina Quintero Caro
genial!
Domina una animación de salto más realista dividiéndola en subida, aire y bajada. La propuesta central es transformar una animación en bucle en un sistema con varios estados y condiciones de transición, aprovechando la dirección del movimiento, la fuerza y la aceleración para que el salto se sienta más natural y controlado.
¿Por qué dividir la animación de salto?
Crear tres animaciones específicas evita el bucle constante y da control fino a cada fase del salto. Así, el movimiento refleja mejor la física percibida: cuando sube, el personaje se frena; cuando baja, acelera.
¿Por qué evitar una animación en bucle constante?
¿Qué tres animaciones componen el salto?
¿Cómo se siente más natural el movimiento?
¿Cómo configurar el grafo y las transiciones?
El reto es modificar el controlador del grafo, aumentar estados y ajustar condiciones para pasar de uno a otro. Puedes usar condiciones booleanas o condiciones numéricas, según lo que ya has trabajado.
¿Cómo preparar el controlador del grafo?
¿Qué condiciones usar en las transiciones?
¿Cómo tratar frames y bucles?
¿Qué habilidades y conceptos refuerzas?
Este ejercicio consolida tu dominio del grafo de animación, la gestión de estados y la lógica de transiciones con señales de movimiento.
¿Qué habilidades se ponen en práctica?
¿Qué conceptos y palabras clave recordar?
¿Tienes dudas sobre cómo plantear las condiciones o estructurar los estados? Comparte tu enfoque y comenta qué lógica te funciona mejor para que el salto se vea fluido y creíble.
Yone Moreno Jiménez
Yone Moreno Jiménez
Diana Carolina Quintero Caro
genial!
Daniel Ardila
Lo que he hecho es agregar elementos adicionales:
Luis Jesus Guerrero Herrera
Hola, aquí mi solución: solo cree dos animaciones, una para JumpUp y otra JumpDown sin loop y sin exit time, después las enlace como se puede ver a continuación:
Después declare la constante para la nueva condición de is Falling:
private const string STATE_FALLING = "isFalling";
También cree un método para comprobar si el personaje va hacia arriba o hacia abajo usando velocity.y:
bool IsFalling(){ if(playerRigibody.velocity.y < 0){ return true; } else{ return false; } }
Y por último en el Update() agregué lo siguiente:
animator.SetBool(STATE_FALLING, IsFalling());
Aquí el resultado final:
Eduardo Pérez
Dividí la animación en dos, uno seria la acción de ir hacia arriba (jumping) y la otra la caída (falling), investigando encontré que con RigidBody podemos obtener la velocidad de movimiento en algún eje entonces:
bool IsFalling() { if (rigidBody.velocity.y < 0.0f) { return true; } else { return false; } }
const string STATE_FALLING = "isFalling";
animator.SetBool(STATE_FALLING, false);
animator.SetBool(STATE_FALLING, IsFalling());
Y funciono y aprendí a detectar cuando esta cayendo que puede servir también cuando cae al vacio
Gael Treviño Prieto
Corre en bucle por que tiene el LOOP TIME activado, solo es cuestion de desactivarlo.
Luis Rodrigo Alvarez Herrera
Cierto, seria una manera facil de hacerlo y ya queda
pero no habria una transicion visible, aunque esto es de cada quien
Luis Rodrigo Alvarez Herrera
a su vez se juega con la velocidad y da el efecto de subir las piernas y bajaralas
Juan Antonio Delgadillo Carrillo
En este reto me salio todo mal , y salia puro error en la consola no supe por que asi que repace las clases y entendi mucho mejor
Abel rolon
simplemente le quite el loop a die y jump y alargue para que se note la animacion
José David De la Cruz Elizondo
¿Que es el loop?
Eduardo Mogollon
Yo lo hice reduciendo la velocidad de la animacion
Ismael Santiago Matiz Cardenas
Yo lo que hice fue quitar el loop time y el time exit eso ya resuelve parte del problema, adicional dividi la animacion en 2 jumpUp jumDown para saber si el personaje cae y pasar de una animacion a la otra cree una variable boolean isFallen, para saber cuando el personaje cae cree una variable global q guarda la posicion en Y del jugador en cada iteracion y la compara con la posicion Y actual
es la posicion Y anterior > la posicion Y actual?
si es asi quiere decir q el peronaje cae y ahi se hace el cambio de una animacion a la otra
float lastYPosition; void Update() { if(Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(0)){ Jump(); } //character animation if(IsTouchingTheGround()){ animator.SetBool(STATE_ON_THE_GROUND, true); } else{ animator.SetBool(STATE_ON_THE_GROUND, false); } //if the last y position is > than the current y position, the character is falling if(lastYPosition > rigidBody.position.y){ animator.SetBool(STATE_FALL, true); }else{ animator.SetBool(STATE_FALL, false); } //update the y position on every iteration lastYPosition = rigidBody.position.y; }
Gaston Blanco
Debo admitir que me costo el desafío, acá comparto mi solución.
des.92
No me funciona, cree 2 animaciones, una cuando va subiendo y otra cayendo y agregue la constante y lo llamo en el start pero después me marca error, como si no se guardaran los cambios en el animator.
William Armando Forero Bermeo
Deberias revisar que ese "Falling" exista como metodo dentro de tu clase puesto que el compilador te dice que no lo puede encontrar o que no existe en el contexto actual
Gregson Murcia Castro
En mi caso decidi acomodar las animaciones de esta manera.
Leonardo Gutierrez
Genial
Wandy Rafael Santana Evangelista
En mi caso lo que hice fue, jugar con las propias herramientas de Unity e hice las animaciones sin tocar codigo, solo toqueteando con Animator.
Gael Treviño Prieto
con que quites el Loop time, todo saldra bien, no tendra bucle la animacion
Nicolas Castañeda
Lo que yo hice:
Juan Manuel Otero Rey
Brandon Ramirez
Yo utilice blen animator para el ejercicio pero en cogido no se como se implemente
Luis Angel Perez
Solo estire los tiempos de la animación (en la ventana Animation o Ctrl+6) haciendo que concuerde en los tiempo en que esta brincando cuando esta suspendido en el aire y cuando va cayendo
Ricardo Chacón García
Lo que hice fue que al saltar continuara la animación de correr y al descender la animación de saltar, le da una escencia más natural.
Hola
Lo que hice fue
Hacer tres nimaiones de salto: JumpUp los 3 primeros frames, JumpStill el frame 4 y JumpDown los 2 ultimos frames
Los añadi al Player (el animator controller)
Añadí un Parameter de tipo float llamado verticalForce.
En la transición entre la Animación Run y JumpUp puse que isOnTheGround sea false, luego entre JumpUp y JumpStill puse que verticalForce greater 0.5 y entre JumpStill y JumpDown verticalForce less -0.5
En el código se escribe la constante:
private const string VERTICAL_FORCE = "verticalForce";
En el update se asgina
animator.SetFloat(VERTICAL_FORCE, rigidBody.velocity.y);
Y en IsTouchingTheGround() se quita el pausar el animator
bool IsTouchingTheGround() { if(Physics2D.Raycast(this.transform.position, Vector2.down,1.5f,groundMask)) { return true; } else { return false; } }``` 