Друзья, приветствую, с Вами Будуев Антон. В данной статье мы поговорим о каналах коллизий в Unreal Engine и их составных элементах: Object Types (типы объектов) и Response (ответной реакции). А также разберём каналы трассировки — Trace Channels.
Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.
Прежде чем углубляться в изучение каналов коллизий, рекомендую также ознакомиться с самой концепцией коллизии в игровом движке: Unreal Engine Collision.
Collision Object Channels
Для установления различных правил взаимодействия объектов друг с другом с точки зрения их коллизий в Unreal Engine существуют каналы объектов.
Object Channels (каналы объектов) — это каналы, которые обозначают типы объектов с точки зрения коллизий и определяют, как эти типы объектов взаимодействуют друг с другом в контексте этих коллизий. Каналы описывают, должны ли объекты (их коллизии) блокировать, пересекаться или игнорировать друг друга.
Иначе говоря, это категории или группы коллизий, которые могут быть назначены объектам в игре. Каждый объект в Unreal Engine (UE4, UE5), содержащий в себе коллизию имеет свой собственный Object Channel, который определяет, как он будет реагировать на столкновения с другими объектами. Это позволяет разработчикам создавать гибкую систему коллизий.
Object Channels включает в себя:
- Object Types (типы объектов) — типы, которые присваиваются объектам, чтобы определить, как эти объекты будут реагировать на коллизии. Грубо говоря, это имя канала.
- Response (ответы при столкновении) — каждому каналу можно задать определённый ответ при столкновении с другими каналами. Это может быть Block (блокировать), Overlap (пересекаться) или Ignore (игнорировать).
То есть, Object Channel (канал объекта) — это Object Type (тип объекта, имя канала) + Response (конкретный ответ этого типа объекта при столкновении).
Object Types
Object Type (тип объекта) — это атрибут, присваиваемый объекту, который указывает на его тип в контексте коллизии. В Анрил Энджин есть несколько стандартных Object Types, но разработчики также могут создавать собственные типы, чтобы адаптировать их под специфические нужды своей игры.
Стандартные Object Types в Unreal Engine:
- World Static — тип для объектов, которые являются частью статической среды (например, стены, полы). Эти объекты не двигаются в игре.
- World Dynamic — тип для динамичных объектов, которые могут двигаться в результате анимации или кода (например, двери, лифт, движущиеся платформы).
- Pawn — тип для игровых персонажей или AI-персонажей. Любая сущность, управляемая игроком.
- Physics Body — тип для объектов, перемещаемых благодаря физической симуляции.
- Vehicle — тип для транспортных средств, таких как машины, самолёты или лодки.
- Destructible — тип для объектов, которые могут быть разрушены, например, разрушаемые стены или ящики.
Collision Object Responses
Collision Object Responses определяет ответную реакцию объекта на другие каналы. Всего для объектов определены три вида реакции:
- Block — блокировать другие каналы. При этом, если у второго объекта реакция тоже Block, то оба объекта сталкиваются, не пропуская друг друга. Также происходит вызов события столкновения (Event Hit).
- Overlap — пересекаться с другими каналами. При этом, если у второго объекта реакция настроена на Overlap или Block, то оба объекта пересекаются, пропуская друг друга сквозь себя. Также, если включена соответствующая настройка, происходит вызов события пересечения (Event Overlap).
- Ignore — полностью игнорировать любое взаимодействие с каналами. При этом неважно, какая реакция у второго объекта. Никакого взаимодействия у объектов не будет. Никаких событий вызываться не будет. Объекты будут пропускать друг друга сквозь себя.
Правила взаимодействия ответных реакций коллизий двух пересекающихся объектов:
- Два объекта столкнутся, заблокируются и у них сработают события Hit только тогда, когда у обоих объектов Collision Object Responses равно Block. * При столкновении в результате физической симуляции для вызова события Hit в настройках коллизии обязательно должна быть включена опция Simulation Generate Hit Events.
- Два объекта пересекутся и у них сработают события Overlap только тогда, когда у обоих объектов Collision Object Responses равно Overlap или у одного Overlap, а у другого Block. * Для вызова события Overlap в настройках коллизии обязательно должна быть включена опция Generate Overlap Events.
- Два объекта просто пересекутся, полностью игнорируя друг друга, без вызова каких-либо событий, если хотя бы у одного из объектов Collision Object Responses равно Ignore.
Как в Unreal Engine создать пользовательский Object Channel
В Unreal Engine имеется возможность создавать свои пользовательские каналы объекта (Object Channel), где каждый канал представляет собой пользовательский тип объекта (Object Type) и конкретный ответ при столкновении для него (Response).
Для этого, перейдите в настройки проекта Edit / Project Settings. Далее в раздел Engine / Collision.
И в разделе Object Channels добавьте свой пользовательский канал, нажав на кнопку New Object Channel. В небольшом открывшемся окошке укажите Ваш новый Object Types (его название), задав ему Response (ответ по умолчанию для этого канала), в виде одного из значений: Block, Overlap или Ignore.

Всего в Анрил Энджин можно создать до 18 пользовательских каналов, включая каналы объектов и каналы трассировки, о которых речь пойдёт ниже в следующем разделе статьи.
Если пользовательский тип объекта, который уже используется в игре, будет удалён, то все применения данного типа будут возвращены к дефолтному типу World Static.
Примером использования пользовательских каналов можно привести следующую ситуацию: в игре имеются такие объекты, как Player, Enemy, Projectile. И, используя пользовательские каналы объектов, мы можем задать индивидуальные правила, по которым данные объекты будут взаимодействовать друг с другом. Например, Player будет блокировать Enemy, но игнорировать Projectile.
Trace Channels
Trace Channels — это каналы трассировки, используемые для проверки пересечения Line Trace (трассировочного луча, сферы, коробки или капсулы) с коллизией объектов игрового мира. Причём в зависимости от конкретного канала трассировки, некоторые объекты могут игнорироваться при пересечениях, а другие — наоборот, учитываться.
Сама трассировка (в форме луча, сферы, коробки или капсулы) создаётся группой специализированных функций языка Blueprint, таких как Line Trace By Channel, Line Trace By Profile и других функций этой группы.
Каналы трассировки применяются в ситуациях, когда нужно определить без фактического столкновения, есть ли искомый объект, который реагирует на текущий Trace Channels, на расстоянии трассировочного луча этого канала. То есть они позволяют разработчикам осуществлять проверку столкновений и взаимодействий без необходимости физически перемещать объекты, что делает их полезными для различных игровых механик, таких как стрельба (попал ли снаряд в цель), проверки видимости (видит ли игрок объект или NPC) и взаимодействие с окружением (например, открыть дверь или поднять предмет).
На рисунке ниже показан пример использования Trace Channels. Выпущенный луч работает по каналу трассировки Visibility. То есть он ищет пересечения с любым объектом, который настроен на этот канал, а другие объекты просто игнорирует. Так как для персонажа заданы настройки игнорировать канал трассировки Visibility, то луч с персонажем не взаимодействует и проходит сквозь него. И останавливается уже только на следующем объекте, который учитывает трассировку по каналу Visibility.

Таким образом, выпуская Line Trace по определённому Trace Channel, мы можем идентифицировать определённые объекты на расстоянии. При чём фактически не сталкиваясь с ними, на расстоянии луча получать необходимую информацию об этом столкновении и этих объектах в специализированной ноде Break Hit Result.
Trace Channels Default
В Unreal Engine по умолчанию уже имеются два канала трассировки:
- Visibility — используется для проверки, виден ли необходимый объект на расстоянии трассировочного луча этого канала. Это полезно для различных игровых механик, таких как прицеливание, стрельба или даже для создания систем ИИ, которые могли бы реагировать на видимые объекты. Например, если враг будет выпускать из себя с определённой периодичностью Line Trace по каналу Visibility и эта трассировка пересечется с игроком, значит, враг видит игрока и находится на достаточном расстоянии, чтобы начать атаковать.
- Camera — это специальная категория трассировки, созданная для проверки коллизий и видимости, связанной с камерой. С её помощью можно проверять, есть ли преграды на пути между камерой и игровыми объектами. Должны ли игровые объекты блокировать камеру игрока или пропускать через себя. Обычно используется при трассировке от камеры к чему-либо.
Как в Unreal Engine создать пользовательский Trace Channel
Как и в случае с каналами объекта, в Unreal Engine также можно создавать и свои пользовательские каналы трассировки. Но, как уже я писал выше, в движке имеется общее ограничение на создание пользовательских каналов. Их должно быть не более 18, включая и каналы объектов, и каналы трассировки вместе.
Создаются Trace Channels точно также, как и Object Channel. Перейдите в настройки проекта Edit / Project Settings. Далее в раздел Engine / Collision. И в разделе Trace Channels добавьте свой пользовательский канал, нажав на кнопку New Trace Channel. В небольшом открывшемся окошке укажите название канала, задав ему Response (ответ по умолчанию для этого канала), в виде одного из значений: Block, Overlap или Ignore.

Если пользовательский канал трассировки, который уже используется в игре, будет удалён, то поведение трассировки будет неопределённым.
Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.