Donc, je fais un RPG de haut en bas.
Tout va très bien, mais ce problème est assez ennuyeux. Maintenant, lorsque le personnage se déplace contre le mur, le joueur tremble d'avant en arrière. Je suppose que c'est parce que le joueur essaie de se déplacer dans le mur, puis la collision avec le mur le repousse, ce qui fait un mouvement de va-et-vient ennuyeux. Ma question est évidemment, comment puis-je empêcher que cela se produise?
Merci!
PS: J'utilise transform.translate pour déplacer le lecteur et j'utilise C #.
EDIT : J'utilise également un 2D Rigidbody et des collisionneurs 2Dbox sur les deux.
Réponses:
Le tremblement se produit parce que vous déformez le joueur dans le mur à l'aide de Transform.Translate, et l'étape de physique dit: "Hé, nous sommes dans le mur. Résolvons ce problème de collision et repoussons le joueur hors du mur. . "
Pour éviter cela, lors de l'utilisation d'un Rigidbody2D, il est conseillé d'utiliser Rigidbody2D.MovePosition . Cela garantit que vous n'aurez pas de collisionneurs lors du déplacement. Si un collisionneur et un corps rigide ne peuvent pas bouger parce que quelque chose gêne, il ne tremblera pas.
À l'aide de Rigidbody2D.MovePosition, vous souhaiterez peut-être définir la valeur d' interpolation Rigidbody2D.pour que le mouvement reste fluide.
Cependant, si Rigidbody2D.MovePosition n'est pas idéal pour votre jeu pour une raison quelconque et que vous souhaitez toujours utiliser Transform.Translate, utilisez Physics2D.Raycast (ou d'autres moulages Physics2D ) pour voir si le déplacement vous ferait heurter un mur ou non, et ne bougez que si aucun mur n'est touché.
la source