Jogador tremendo contra a parede quando pressionado o botão

17

Então, eu estou fazendo um RPG de cima para baixo.

Tudo está indo bem, mas esse problema é bastante irritante. Agora, quando o personagem se move contra a parede, o jogador se mexe para frente e para trás. Acho que é porque o jogador está tentando se mover contra a parede, e então a colisão da parede a empurra para trás, o que faz um movimento irritante de um lado para o outro. Minha pergunta é obviamente: como faço para impedir que isso aconteça?

Obrigado!

PS: Estou usando o transform.translate para mover o player e estou usando o C #.

EDIT : Eu também estou usando um 2D Rigidbody, e 2Dbox colliders em ambos.

GMR516
fonte
Você só precisa de um teste de varredura antes de traduzir
MickLH
Oh. Não sei como adicionar isso no Unity C #. Eu sou um pouco novo em c #. Se você tem o conhecimento, você se importaria de explicar como implementar isso?
GMR516

Respostas:

51

O tremor está acontecendo porque você está entortando o jogador na parede usando o Transform.Translate, e a etapa da física está dizendo: "Ei, estamos na parede. Vamos resolver esse problema de colisão e empurrar o jogador para fora da parede . "

Para evitar isso, ao usar um Rigidbody2D, é recomendável usar o Rigidbody2D.MovePosition . Isso garante que você não terá colisões sobrepostas ao se mover. Se um colisor e um corpo rígido não puderem se mover porque algo está no caminho, ele não tremerá.

Usando Rigidbody2D.MovePosition, convém definir o valor de Rigidbody2D.interpolation para manter o movimento com suavidade.

No entanto, se Rigidbody2D.MovePosition não for ideal para o seu jogo por algum motivo e você ainda quiser usar o Transform.Translate, use o Physics2D.Raycast (ou outros lançamentos do Physics2D ) para ver se o movimento faria você bater em uma parede ou não, e só se mova se nenhuma parede for atingida.

Chris McFarland
fonte