Hola a todos.
Bienvenidos al video.
En este video quiero mostrarte cómo voltear el personaje, porque ahora si intentamos correr a la izquierda, no se voltea.
Y se siente raro, ¿verdad?
Déjame explicarte qué podemos hacer aquí.
Una forma es voltear el sprite aquí, pero no lo prefiero por una razón sencilla.
Cuando volteamos el sprite, solo se voltea el sprite, nada más.
Así que ahora mi personaje mira a la izquierda, pero su vector right, su dirección de frente, sigue apuntando a la derecha, y no podemos trabajar con eso porque más adelante tendremos una comprobación de pared para el salto en pared, que se lanzará a la derecha, y quiero que esa comprobación también se voltee cuando volteamos el personaje.
Porque si no lo hacemos así, pero rotamos el personaje en Y a 180, también mirará a la izquierda, pero al mismo tiempo su vector right apuntará a la izquierda.
Así que sabemos la dirección de frente, volteamos la dirección y el sprite al mismo tiempo.
Ahora, ¿cómo volteamos el personaje junto con la dirección de frente?
En realidad, solo cambiamos la rotación en Y aquí y rotamos el personaje 180 en Y cada vez que queremos voltearlo.
Así es como se verá: ¡boom! y luego ¡boom! así de simple.
Hagámoslo en el script.
Apliquemos esta rotación al transform en el script.
En algún lugar abajo pero antes de onDrawGizmos, haré un método privado void Flip.
Transform.
Rotate.
Cero en X, 180 en Y y cero en Z, así que solo rotamos en el eje Y.
Guardamos y llamamos a esta función para asegurarnos de que funciona. En Update, si Input.GetKeyDown(KeyCode.C), llamamos a Flip.
Regresamos.
Estoy parado aquí, presiono la tecla C y se voltea.
Por supuesto, no puedo presionar esta tecla cada vez que necesito voltear el personaje, debe hacerse automáticamente.
Así que haremos un método que compruebe si el jugador está mirando a la derecha y si está mirando a la derecha pero su velocidad es negativa y corre a la izquierda, debemos voltearlo.
Si está mirando a la izquierda pero debe mirar a la derecha porque se mueve a la derecha, también lo volteamos.
Para eso, aquí necesitamos un booleano privado facingRight = true.
Desde el inicio sabemos que mira a la derecha.
Ahora hagamos un método privado void HandleFlip.
En este método, si velocity.x < 0 y facingRight, llamamos a Flip.
Ahora llamamos a este método en Update después del movimiento.
Guardamos y probamos.
Estoy parado, corro a la izquierda y se voltea.
Pero es demasiado, lo arreglaremos.
Ahora se volteó.
Cuando corro a la derecha, no se voltea. ¿Cómo lo arreglamos?
Cuando volteamos, no solo volteamos el personaje, también decimos que ya no está mirando a la derecha.
Pero podemos hacer facingRight = !facingRight cada vez que llamamos a Flip.
Probamos en Unity: corro a la izquierda, se voltea una vez, corro a la derecha, no se voltea.
Agregamos una condición OR: si velocity.x > 0 y !facingRight, también llamamos a Flip.
Probamos y funciona.
Corro a la derecha, izquierda, derecha, izquierda, y también funciona con el salto. ¡Genial!
Agregamos una variable int facingDirection = 1 para saber si mira a la derecha o izquierda.
En Flip, facingDirection *= -1, así será 1 o -1. Probamos en modo debug y funciona.
¡Buen trabajo! Nos vemos en el próximo video.