Почему в Unity 2D коллизия игрока конфликтует с другими коллизиями?

Рейтинг: -1Ответов: 1Опубликовано: 12.02.2025

В игре у меня игрок - это пистолет, который вращается за курсором. Проблема в том, что когда пистолет лежит на земле, он начинает дергаться, входить в коллизию земли и сам по себе двигаться из-за этого, особенно если я начинаю двигать курсор. Код, отвечающий за слежение за курсором, стрельбу и тд. написан в FixedUpdate, так что скорее всего проблема не в этом. Подскажите пожалуйста, ответов на форумах с моей проблемой не нашел, были похожие, но там советовали просто в FixedUpdate код писать.

уточнение: такие конфликты коллизий происходят с всеми типами коллайдеров, кроме круглого.

на всякий случай вставлю кусок кода:

public void LookDirection()

{

    mousPos = Camera.ScreenToWorldPoint(Input.mousePosition);

    lookDir = mousPos - rigid_B.position;

    float rotAngle = Mathf.Atan2(lookDir.y, lookDir.x) * Mathf.Rad2Deg + deltaAngle;

    rigid_B.rotation = rotAngle;
}

введите сюда описание изображения

Ответы

▲ 3Принят

Это не пистолет дёргается, это ты его дёргаешь.

На все тела влияет симуляция физики, за счёт чего они меняют своё положение и поворот под воздействием сил, придающих им скорость в пространстве и угловую скорость вращения вокруг центра массы тела, изменяемого моментом импульса.


От того, что ты задал rotation, angularVelocity никуда не делась.

Как бы банально и логично это не звучало, НО если поворот тела полностью управляется, то симуляция не должна на него никак влиять и вмешиваться в процесс! Для этого у тела есть флаг Freeze Rotation, который у тебя не стоит.

Если же тело должно поворачиваться от столновений, то управление должно сосуществовать с симуляцией и быть одной из сил, которая заставляет тело поварачиваться в нужную сторону путём придания улового поворота.


Fixed Update исполняется при шаге физической симуляции. Если симуляция не действует на поворот, то и смена поворота в Fixed Update ничего не изменит. Так в целом с всеми импутами, Fixed Update существует абсолютно для других целей.