Игрок дрожит от стены, когда удерживается кнопка

17

Итак, я делаю RPG сверху вниз.

Все идет отлично, но эта проблема довольно раздражает. Теперь, когда персонаж движется к стене, игрок дрожит взад и вперед. Я предполагаю, что это потому, что игрок пытается проникнуть в стену, а затем столкновение со стеной отталкивает его назад, что вызывает раздражающее движение вперед и назад. Мой вопрос, очевидно, как я могу предотвратить это?

Благодарность!

PS: я использую transform.translate для перемещения игрока, и я использую C #.

РЕДАКТИРОВАТЬ : я также использую 2D Rigidbody и 2Dbox коллайдеры на обоих.

GMR516
источник
Тебе просто нужно пройти тест, чтобы перевести
MickLH
Ой. Э-э ... Я не уверен, как добавить это в Unity C #. Я немного новичок в C #. Если у вас есть знания, не могли бы вы объяснить, как это реализовать?
GMR516

Ответы:

51

Дрожание происходит потому, что вы деформируете игрока в стену с помощью Transform.Translate, а физический шаг говорит: «Эй, мы в стене. Давайте решим эту проблему столкновения и вытолкнем игрока обратно из стены. «.

Чтобы избежать этого, при использовании Rigidbody2D желательно использовать Rigidbody2D.MovePosition . Это гарантирует, что у вас не будет перекрывающихся коллайдеров при движении. Если коллайдер и твердое тело не могут двигаться, потому что что-то мешает, оно не будет дрожать.

Используя Rigidbody2D.MovePosition, вы можете установить значение Rigidbody2D.interpolation, чтобы движение выглядело гладким.

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

Крис Макфарланд
источник