Коллизии и физика: 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; форму упрощают ради скорости.