Hola a todos.
Bienvenidos al video.
En este video vamos a crear la habilidad de salto en pared para el jugador.
Antes de eso, explicaré las corutinas en Unity.
¿Qué es una corutina y para qué sirve?
Vamos al script del jugador.
Creamos un método privado IEnumerator llamado Coroutine.
Una corutina es como un método que puedes pausar, esperar unos segundos y luego continuar.
Ejemplo: Debug.Log("Coroutine started"); yield return new WaitForSeconds(1); Debug.Log("Un segundo pasó"); yield return new WaitForSeconds(3); Debug.Log("Coroutine terminada").
Para iniciar una corutina, usamos StartCoroutine(nombreCorutina).
Probamos y vemos los mensajes en consola con los tiempos de espera.
Esto será útil para el salto en pared, porque necesitamos pausar el movimiento horizontal un tiempo.
Agregamos un header "Wall Interactions" y variables para la duración y fuerza del wall jump.
Creamos un Vector2 wallJumpForce y un bool isWallJumping.
Creamos el método privado void WallJump.
En WallJump, aplicamos la velocidad usando wallJumpForce.x * -facingDirection y wallJumpForce.y.
Al saltar en la pared, isWallJumping = true.
En el método de salto, si isWallDetected, llamamos a WallJump antes del double jump.
En handleMovement, si isWallJumping, return.
Para que el jugador no pueda moverse durante el wall jump, usamos una corutina que pone isWallJumping en true, espera wallJumpDuration y luego lo pone en false.
Guardamos y probamos: salto en pared y luego puedo moverme de nuevo.
Ajusta wallJumpDuration para que el salto se sienta bien.
Aumenta o disminuye wallJumpForce.x o y para cambiar la dirección y fuerza del salto.
Para que el personaje mire en la dirección correcta, llamamos a Flip después de aplicar la velocidad.
Si quieres, puedes evitar que el jugador voltee durante el wall jump usando un bool canFlip.
También puedes permitir double jump durante el wall jump para mayor flexibilidad.
En wallJump, resetea canDoubleJump a true.
Asegúrate de que solo puedas hacer wall jump si no estás en el suelo y estás en la pared.
Si haces wall jumps muy rápido, puedes tener glitches. Para evitarlo, usa StopAllCoroutines() antes de iniciar una nueva corutina de wall jump.
¡Listo! Wall jump funcionando correctamente. Nos vemos en el próximo video.