Коллизии и физика: overlap, hit, Chaos

Урок про столкновения объектов: блокировку, пересечения, события и физику на движке Chaos.

Коллизия — это объём вокруг объекта, по которому движок определяет столкновения; реакция на столкновение задаётся как Block, Overlap или Ignore.

Три типа реакции

Каждая пара объектов может взаимодействовать одним из трёх способов. Это ключ к пониманию всей системы.

РеакцияЧто происходитСобытие
BlockОбъекты физически не проходят друг сквозь другаHit
OverlapПроходят насквозь, но движок сообщает о пересеченииBegin/End Overlap
IgnoreПолностью игнорируют друг друганет

Block и событие Hit

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

Overlap и триггеры

Overlap — основа триггеров. Зона подбора предмета или вход в комнату делается через объём с реакцией Overlap: персонаж проходит сквозь, но движок шлёт событие ActorBeginOverlap, по которому вы выдаёте награду или запускаете сценку.

Игрок входит в зону аптечки (Overlap)
     |
[Event ActorBeginOverlap]
     |
[Branch: это игрок?] -- True --> [Heal + Destroy аптечку]

Каналы коллизий

Чтобы гибко настраивать, кто с кем сталкивается, Unreal использует каналы (Object Channels и Trace Channels). Объект относится к типу (например, Pawn, WorldStatic) и задаёт реакцию на каждый канал отдельно. Так пуля может блокироваться стенами, но проходить сквозь полупрозрачные эффекты.

Физика и Chaos

За симуляцию твёрдых тел отвечает движок Chaos — современная физическая система Unreal. Если у объекта включить Simulate Physics, он начнёт падать под гравитацией, отскакивать и реагировать на толчки. Chaos также умеет разрушать объекты (Chaos Destruction): стену можно настроить так, чтобы она разлеталась на куски от удара.

Как работает под капотом

На каждом кадре физическая подсистема собирает все коллизионные объёмы и ищет пересечения. Для блокирующих пар она вычисляет силу и не даёт объектам проникнуть друг в друга; для overlap-пар просто фиксирует факт пересечения и шлёт события. Сложная форма меша для физики обычно заменяется упрощённой коллизионной формой (capsule, box, convex), потому что считать столкновения по тысячам полигонов слишком дорого.

Частые ошибки

  • Ждать Overlap при реакции Block. Эти события взаимоисключающие: Block даёт Hit, Overlap даёт Overlap.
  • Забыть включить Generate Overlap Events. Без этого флага overlap-события не придут.
  • Точная коллизия по мешу. Дорого; используйте простые коллизионные формы.

Трассировка лучей

Кроме объёмных коллизий, в играх постоянно нужна трассировка — Line Trace (raycast). Это «выстрел» невидимым лучом из точки в точку с вопросом «во что я попал?». На трассировке держится прицеливание оружия (куда смотрит ствол?), проверка «стоит ли игрок на земле?», выделение объекта под курсором. Луч возвращает первый блокирующий объект, точку и нормаль попадания — те же данные, что и событие Hit, только запрошенные явно, когда они нужны вам, а не когда случилось столкновение.

Трассировка использует те же каналы коллизий: можно стрелять лучом, который видит только врагов и игнорирует декорации. Это делает её гибким инструментом запросов к миру. Многие механики, от лазерного прицела до системы «что под прицелом», — это, по сути, удачно настроенная трассировка, и владение ей — обязательный навык разработчика на Unreal.

Итоги

  • Три реакции: Block (упирается, Hit), Overlap (проходит, событие), Ignore.
  • Hit — для попаданий и ударов; Overlap — для триггеров и зон.
  • Каналы коллизий задают, кто с кем сталкивается.
  • Физику тел и разрушения считает движок Chaos; форму упрощают ради скорости.
Проверьте себя
1. Какое событие срабатывает при реакции Block?
ABegin Overlap
BHit
CTick
DBeginPlay
2. Какую реакцию выбрать для зоны подбора предмета?
ABlock
BOverlap
CIgnore
DSimulate Physics
3. Какой движок отвечает за физику тел и разрушения в современном Unreal?
APhysX
BChaos
CBullet
DHavok