Joueur agitant contre le mur lorsque le bouton est maintenu enfoncé


17

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.


Vous avez juste besoin d'un test de balayage avant de traduire
MickLH


Oh. Euh ... Je ne sais pas comment ajouter ceci dans Unity C #. Je suis un peu nouveau pour C #. Si vous avez les connaissances, pourriez-vous expliquer comment mettre en œuvre cela?
Genevra

Réponses:


51

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.