Hola 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 ...

Matias Nicolas Giorgieff

Matias Nicolas Giorgieff

Pregunta
studenthace 6 años

Hola 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.

7 respuestas
para escribir tu comentario
    Raúl Alejandro Chávez Valenzuela

    Raúl Alejandro Chávez Valenzuela

    studenthace 5 años

    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

    Johnny Vargas Diaz

    studenthace 6 años

    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

    Leonardo Ernesto Solórzano Carrasquero

    studenthace 6 años

    Buen aporte!

    Matias Nicolas Giorgieff

    Matias Nicolas Giorgieff

    studenthace 6 años

    Muchas gracias Jamarin_ !!!

    Jose Antonio Marín López

    Jose Antonio Marín López

    studenthace 6 años

    ¡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

    Matias Nicolas Giorgieff

    studenthace 6 años

    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

    Ricardo Celis

    teacherhace 6 años

    Raro, podrías subir screenshots?

Curso Avanzado de Creación de RPGs con Unity

Curso Avanzado de Creación de RPGs con Unity

Diseña y gestiona misiones RPG en Unity. Crea NPCs que hablen, dirige eventos al recolectar objetos o matar enemigos, y añade coherencia con textos interactivos. Integra efectos de sonido y usa colisionadores para misiones.

Curso Avanzado de Creación de RPGs con Unity
Curso Avanzado de Creación de RPGs con Unity

Curso Avanzado de Creación de RPGs con Unity

Diseña y gestiona misiones RPG en Unity. Crea NPCs que hablen, dirige eventos al recolectar objetos o matar enemigos, y añade coherencia con textos interactivos. Integra efectos de sonido y usa colisionadores para misiones.