Пятница, 01.11.2024, 04:23
UE4 Docs
Подбор по параметрам
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Обзор коллизий.

На этой странице:

  • Взаимодействия
  • Примеры общих взаимодействий при столкновениях
  • ​Коллизия
  • Коллизия и генерация события столкновения (hit event)
  • Пересечение и игнорирование
  • Пересечение и генерация события пересечения (overlap event)

​Реакции столкновения (Collision Responses) и реакции трассировки (Trace Responses) формируют основу для обработки столкновений и бросания лучей (ray casting) UE4 во время игры. Каждый объект, который может сталкиваться, получает объектный тип и ряд реакций, которые определяют как он будет взаимодействовать со всеми другими типами объектов. Когда происходит столкновение или событие пересечения, у всех взаимодействующих объектов может быть установлено воздействие или реакция на воздействие следующим образом: блокировкой, игнорированием или событием пересечения.

Trace Response в основном работает также, за исключением того, что сама трассировка (ray cast) может быть назначена как один из типов Trace Response, таким образом позволяя Actor либо блокировать его, либо игнорировать, основываясь на их Trace Response.

Взаимодействия

Нужно иметь ввиду несколько правил, по которым обрабатываются столкновения:

  • Блокировка естественно случится между двумя или более Actor, если у них установлено Block. Однако чтобы произошло событие попадания (Hit Event), которое используется в блюпринтах, разрушаемых Actor (Destructible Actor), триггерах и т.д., должен быть включен Simulation Generates Hit Events.
  • Установка у Actor Overlap часто выглядит так, как будто объекты игнорируют друг друга - без включения Generates Overlap Events, по сути Overlap работает также как Ignore.
  • Чтобы объекты блокировали друг друга, у всех должно быть выставлено Block в соответствующих типах объектов.
  • Для взаимодействующих объектов: если у одного стоит Overlap  а у другого Block, то при столкновении сработает overlap а не block.
  • Overlap Event  может быть сгенерировано даже если у объекта включен Block, особенно при движении на высокой скорости.
    • не рекомендуется для объекта иметь и событие пересечения и событие столкновения. Это требует ручной настройки.
  • Если у одного объекта стоит Ignore а у другого Overlap, то события Overlap не произойдет.

​Для целей тестирования уровней и осмотра вашего мира:

  • В режиме по умолчанию Play In Editor камера является Pawn. Она может быть заблокирована любым Pawn с включенным Block.
  • В режиме Simulate In Editor камера, пока не вселилась во что-нибудь, не является Pawn. Она может свободно проходить сквозь все препятствия и не создает никаких событий и коллизий.

Примеры взаимодействий при столкновениях

Эти взаимодействия предполагают что у всех объектов в пункте Collision Enabled стоит Collision Enabled, так что они настроены на полное столкновение со всем. Если же коллизия выключена, это будет аналогично установке Ignore во всех пунктах Collision Responses.

В следующем разделе будут даны настройки для объяснения происходящего:

Здесь шар - PhysicsBody, a стена - WorldDynamic, и изменяя их настройки столкновения мы можем получить различные поведения.

Столкновение

Установив у обоих объектов в настройках коллизии блокировать друг друга, мы получим хороший пример взаимодействия объектов:

Настройки коллизий шара Настройки коллизий Стенки
В этом случае шар это PhysicsBody и он настроен на блокировку WorldDynamic (которой является стена). Стена это WorldDynamic и она установлена на блокировку PhysicsBody (которым является шар).

В этом случае шар и стена просто столкнутся; никаких дополнительных уведомлений о столкновении не будет.

Столкновение и генерирование Hit Event

Просто столкновение полезно и в целом это достаточный минимум для физических взаимодействий, но если вы хотите чтобы возникало событие столкновения для срабатывания блюпринта или участка кода:

Настройка коллизий шара Настройка коллизий стены
Как и в предыдущем примере, шар это PhysicsBody и он настроен на блокировку WorldDynamic (которой является стена). Однако у него также включен Simulation Generates Hit Event, так что он будет сам вызывать событие каждый раз, когда сталкивается с чем-нибудь. Стена это WorldDynamic и она настроена на блокировку PhysicsBody (которым является шар). Поскольку у стены не включен Simulation Generates Hit Event, она не станет генерировать событие столкновения.

С установкой у шара Simulation Generates Hit Event, он будет знать когда столкнется с чем-либо. В результате выдаются события в блюпринте шара, такие как RecieveHit и OnComponentHit. А вот у стены, если произойдет столкновение, никакого события не возникнет, так как она себе не сообщит об этом.

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

Пересечение и игнорирование (Overlap и Ignore)

Для всех намерений и целей, Overlap и Ignore работают точно также, как если Generate Overlap Events отключен. В этом случае шар настраивается на пересечение или игнорирование стены:

Настройки Коллизий Шара Настройки Коллизий Стены
Здесь шар настроен на пересечение с объектами WorldDynamic (как наша стена), но у него не включен Generate Overlap Events. Таким образом настроенный шар ни с чем не столкнется и не пересечется, то есть проигнорирует нашу стену. Стена является WorldDynamic и настроена на блокировку объектов PhysicsBody (которым является шар). Как указано выше, оба объекта должны быть настроены на блокировку соответствующих типов объектов, иначе столкновения не произойдет.

Или:

Настройки Коллизий Шара Настройки Коллизий Стены
Здесь шар настроен на игнорирование WorldDynamic ( таких как наша стена), и он пройдет сквозь стену. Стена является WorldDynamic и настроена на блокировку PhysicsBody (которым является наш шар). Как показано выше, оба объекта должны быть настроены на блокировку типов друг друга, иначе столкновения не произойдет.

Пересечение и генерирование события пересечения (Overlap Event)

В отличие от столкновений, которые срабатывают каждый кадр, события пересечения срабатывают в начале (RecieveBeginOverlap) и в конце (RecieveEndOverlap) пересечения.

Для того, чтобы случилось пересечение, нужно чтобы у обоих Actor'ов был включен пункт Generate Overlap Events. Это сделано для производительности.

Вход на сайт
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • База знаний uCoz
  • Copyright MyCorp © 2024

    uCoz