Spieler zittert an der Wand, wenn er die Taste gedrückt hält


17

Also mache ich ein Top-Down-Rollenspiel.

Alles läuft hervorragend, aber dieses Problem ist ziemlich ärgerlich. Wenn sich der Charakter nun gegen die Wand bewegt, zittert der Spieler vor und zurück. Ich vermute, es liegt daran, dass der Spieler versucht, sich in die Wand hinein zu bewegen, und die Wandkollision schiebt sie dann zurück, was zu einer nervigen Hin- und Herbewegung führt. Meine Frage ist natürlich, wie kann ich das verhindern?

Vielen Dank!

PS: Ich benutze transform.translate, um den Player zu bewegen, und ich benutze C #.

BEARBEITEN : Ich verwende auch einen 2D-Rigidbody und 2D-Box-Collider auf beiden.


Sie brauchen nur einen
Wischtest,


Oh. Ich bin mir nicht sicher, wie ich das in Unity C # hinzufügen soll. Ich bin ein bisschen neu in C #. Wenn Sie über das Wissen verfügen, würde es Ihnen etwas ausmachen, zu erklären, wie dies implementiert werden kann?
GMR516

Antworten:


51

Das Jittering tritt auf, weil Sie den Spieler mit Transform.Translate in die Wand krümmen und der physikalische Schritt lautet: "Hey, wir sind in der Wand. Lösen wir dieses Kollisionsproblem und schieben den Spieler zurück aus der Wand . "

Um dies zu vermeiden, ist es bei Verwendung eines Rigidbody2D ratsam, Rigidbody2D.MovePosition zu verwenden . Dies stellt sicher, dass sich die Collider beim Verschieben nicht überlappen. Wenn sich ein Kollider und ein starrer Körper nicht bewegen können, weil etwas im Weg ist, wird es nicht zittern.

Wenn Sie Rigidbody2D.MovePosition verwenden, möchten Sie möglicherweise den Wert Rigidbody2D.Interpolation festlegen , damit die Bewegung reibungslos aussieht .

Wenn Rigidbody2D.MovePosition aus irgendeinem Grund nicht ideal für Ihr Spiel ist und Sie dennoch Transform.Translate verwenden möchten, verwenden Sie Physics2D.Raycast (oder andere Physics2D- Casts), um festzustellen, ob Sie durch Bewegen gegen eine Wand stoßen oder nicht Nur bewegen, wenn keine Wand getroffen wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.