
Matias Nicolas Giorgieff
PreguntaHola Juan/Comunidad, vi varias veces el video y tengo todo igual pero el personaje quedo raro después de que le agregamos las físicas. Y en cuanto a raro me refiero a que si estas caminando verticalmente (W o flecha para arriba) y aprietas rápidamente y sin soltar la (D o flecha para la derecha) y luego sueltas la (W o flecha para arriba) sigue caminando en diagonal, cuando tendría que caminar solamente para la derecha. Reverse los cambios hasta antes de agregarle el rígidobodies y funciona como describo anteriormente, porfavor su ayuda en esto.

Raúl Alejandro Chávez Valenzuela
Una método súper sencillo:
void Update(){ rigidBody.velocity = Vector2.zero; /* Lógica de los Axis horizontales y verticales */ // De esta manera, por default el personaje estará // quieto, a menos que uno de los Axis diga lo // contrario (que lo estamos moviendo) y le // actualicemos la velocidad después de que fue // puesta en 0's. }
Johnny Vargas Diaz
Jamarin me parece que así esta un poco enredada la cosa, de hecho se me bloqueaba el movimiento diagonal no se si por mi o que, pero creo que de esta forma es un poco mas cómodo y fácil de entender
if (Mathf.Abs(Input.GetAxisRaw(horizontal)) > 0.5 && Mathf.Abs(Input.GetAxisRaw(vertical)) > 0.5) { fisicasJugador.velocity = new Vector2( Input.GetAxisRaw(horizontal) * speed * Time.deltaTime, Input.GetAxisRaw(vertical) * speed * Time.deltaTime); caminando = true; }else if (Mathf.Abs(Input.GetAxisRaw(horizontal)) > 0.5) { fisicasJugador.velocity = new Vector2( Input.GetAxisRaw(horizontal) * speed * Time.deltaTime, 0f); ultimoMovimiento = new Vector2(Input.GetAxisRaw(horizontal), 0); caminando = true; }else if (Mathf.Abs(Input.GetAxisRaw(vertical)) > 0.5) { fisicasJugador.velocity = new Vector2( 0f, Input.GetAxisRaw(vertical) * speed * Time.deltaTime); ultimoMovimiento = new Vector2(0, Input.GetAxisRaw(vertical)); caminando = true; }
Leonardo Ernesto Solórzano Carrasquero
Buen aporte!

Matias Nicolas Giorgieff
Muchas gracias Jamarin_ !!!

Jose Antonio Marín López
¡Hola! A mi me pasaba lo mismo que a ti, se debe a que en ningún momento hacemos que se reinicie a cero la velocidad al dejar de pulsar una de esas dos teclas, solamente se hace cuando el movimiento completo es cero.
Lo he solucionado con el siguiente código (añadiendo los dos else):
if(Mathf.Abs(Input.GetAxisRaw(horizontal)) > 0.5f) { //this.transform.Translate(new Vector3(Input.GetAxisRaw(horizontal) * speed * Time.deltaTime, 0f, 0f)); playerRB2D.velocity = new Vector2(Input.GetAxisRaw(horizontal) * speed * Time.deltaTime, playerRB2D.velocity.y); walking = true; lastMovement = new Vector2(Input.GetAxisRaw(horizontal), 0); } else { playerRB2D.velocity = new Vector2(0f, playerRB2D.velocity.y); } if (Mathf.Abs(Input.GetAxisRaw(vertical)) > 0.5f) { //this.transform.Translate(new Vector3(0f, Input.GetAxisRaw(vertical) * speed * Time.deltaTime, 0f)); playerRB2D.velocity = new Vector2(playerRB2D.velocity.x, Input.GetAxisRaw(vertical) * speed * Time.deltaTime); walking = true; lastMovement = new Vector2(0, Input.GetAxisRaw(vertical)); } else { playerRB2D.velocity = new Vector2(playerRB2D.velocity.x, 0f); }

Matias Nicolas Giorgieff
Hola Ricardo, muchas gracias por contestar, la verdad que en una simple imagen no podrías ver lo que te digo, grabe un video de segundos y lo subí a internet lo dejare en este comentario para que lo puedas ver. Si te fijas el personaje constantemente va en diagonal y yo no estoy apretando las 2 teclas para que lo haga.
Antes que nada muchas gracias! video

Ricardo Celis
Raro, podrías subir screenshots?