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.
Respostas:
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.
fonte