Jugador temblando contra la pared cuando se mantiene presionado el botón

17

Entonces, estoy haciendo un juego de rol de arriba hacia abajo.

Todo va excelente, pero este problema es bastante molesto. Ahora, cuando el personaje se mueve contra la pared, el jugador se mueve de un lado a otro. Supongo que es porque el jugador está tratando de moverse hacia la pared, y luego la colisión de la pared lo empuja hacia atrás, lo que hace un molesto movimiento de ida y vuelta. Mi pregunta es, obviamente, ¿cómo evito que esto suceda?

¡Gracias!

PD: estoy usando transform.translate para mover el reproductor, y estoy usando C #.

EDITAR : También estoy usando un cuerpo rígido 2D y colisionadores 2Dbox en ambos.

GMR516
fuente
Solo necesita una prueba de barrido antes de traducir
MickLH
Oh. Uh ... no estoy seguro de cómo agregar esto en Unity C #. Soy un poco nuevo en C #. Si tiene el conocimiento, ¿le importaría explicar cómo implementar esto?
GMR516

Respuestas:

51

La fluctuación está sucediendo porque está deformando al jugador contra la pared usando Transform.Translate, y el paso de física dice: "Hola, estamos en la pared. Resolvamos este problema de colisión y empujemos al jugador fuera de la pared". ".

Para evitar esto, cuando se usa un Rigidbody2D, es aconsejable usar Rigidbody2D.MovePosition . Esto garantiza que no tendrá colisionadores superpuestos cuando se mueva. Si un colisionador y un cuerpo rígido no pueden moverse porque algo está en el camino, no se sacudirá.

Con Rigidbody2D.MovePosition, es posible que desee establecer el valor de Rigidbody2D.interpolation para que el movimiento se vea suave.

Sin embargo, si Rigidbody2D.MovePosition no es ideal para su juego por alguna razón y todavía quiere usar Transform.Translate, use Physics2D.Raycast (u otros lanzamientos de Physics2D ) para ver si moverse lo haría golpear una pared o no, y solo mueva si no se golpea ninguna pared.

Chris McFarland
fuente