Гравець тремтить на стіні, коли утримує кнопку


17

Отже, я роблю RPG зверху вниз.

Все йде чудово, але ця проблема досить дратує. Тепер, коли персонаж рухається до стіни, гравець тремтить туди-сюди. Я здогадуюсь це тому, що гравець намагається просунутися в стіну, а потім зіткнення стіни відштовхує її назад, що робить дратівливий рух назад і назад. Моє питання, очевидно, як я цього НЕ відбувалося?

Спасибі!

PS: Я використовую transform.translate для переміщення плеєра, а я використовую C #.

EDIT : Я також використовую 2D Rigidbody і 2Dbox коллайдери на обох.


Вам просто потрібен
ретельний


Ой. Ага ... я не впевнений, як додати це в Unity C #. Я трохи новачок у C #. Якщо ви володієте знаннями, чи не могли б ви пояснити, як це здійснити?
Женевра

Відповіді:


51

Тремтіння відбувається тому, що ви перекручуєте гравця в стіну за допомогою Transform.Translate, а крок фізики говорить: "Гей, ми в стіні. Давайте вирішимо цю проблему зіткнення і відштовхнемо плеєра назад зі стіни . "

Щоб уникнути цього, при використанні Rigidbody2D доцільно використовувати Rigidbody2D.MovePosition . Це гарантує, що у вас не буде коліда, що перекривається, під час руху. Якщо колайдер і жорстка людина не можуть рухатися, тому що щось у дорозі, воно не буде тремтіти.

Використовуючи Rigidbody2D.MovePosition, ви можете встановити значення Rigidbody2D.interpolation, щоб рух виглядав плавним.

Однак якщо Rigidbody2D.MovePosition чомусь не ідеально підходить для вашої гри, і ви все ще хочете скористатися Transform.Translate, використовуйте Physics2D.Raycast (або інші ролі Physics2D ), щоб побачити, чи переміщення змусить вас вдарити стіну чи ні, і рухатися лише в тому випадку, якщо жодна стіна не потрапила.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.