Hola a todos.
Bienvenidos al video.
Ya casi terminamos el desarrollo del personaje, solo faltan algunos pasos más.
Ahora haremos el retroceso (knockback).
Quiero dejar la funcionalidad más importante lista para poder pasar a enemigos, trampas y niveles sin volver tanto al jugador.
No te preocupes, solo quedan unos videos más.
En este video haremos el retroceso, para que el jugador pueda ser empujado por trampas o enemigos.
Primero, eliminamos una plataforma para tener espacio.
Vamos al Animator y creamos un nuevo clip: Player Knocked.
En gráficos, buscamos el sprite de golpe y lo ponemos en la animación, con sample rate 12.
Así el jugador se ve más lento cuando es golpeado.
En el Animator, creamos un parámetro trigger llamado knockback.
Arrastramos la animación y hacemos transición desde cualquier estado (Any State) a knocked, con condición knockback.
Así puede ser golpeado en cualquier momento.
Ponemos la duración de transición en cero y desmarcamos exit time.
De knocked a idle/move, sin condición, pero con exit time en uno.
Ahora configuramos el retroceso en el script.
Creamos un header Knockback, con variables para duración, fuerza y booleanos.
Ya tenemos el script.
Creamos el método público Knockback.
Ponemos isKnocked en true y activamos la animación con anim.SetTrigger("Knockback").
Este método lo llamarán los enemigos o trampas, por eso es público.
Por ahora, lo probamos con una tecla del teclado.
Corremos, presionamos K y el jugador es golpeado.
Queremos que el retroceso dure un tiempo y luego se desactive. Usamos una corutina para eso.
En la corutina, canBeKnocked = false, isKnocked = true, esperamos la duración y luego los reseteamos.
En Knockback, llamamos a StartCoroutine(KnockbackRoutine).
Mientras isKnocked, el jugador no puede moverse ni saltar. En los métodos de movimiento, si isKnocked, return.
Probamos: durante el retroceso no podemos saltar, pero sí después.
Muy bien.
Aplicamos la fuerza de retroceso usando RB.velocity = new Vector2(knockbackPower.x * -facingDirection, knockbackPower.y).
Si isKnocked, no podemos volver a activar el retroceso.
Probamos con valores de fuerza y funciona.
Si la animación es más corta que la duración, ajusta knockbackDuration para que coincidan.
Si quieres un retroceso más largo, puedes usar un booleano para controlar la transición de animaciones.
Por ahora, lo dejamos así y lo ajustamos después si es necesario.
Más adelante mejoraremos el retroceso según el objeto que golpee al jugador.
¡Listo! Pasamos al siguiente video.