Физический триггер (Physical Trigger)
Physical Trigger - это нода, которая инициирует выполнение событий, когда физические объекты входят или выходят из нее. В зависимости от формы существует 4 типа физических триггеров:
- сферический триггер указанного радиуса;
- капсульный триггер указанного радиуса и высоты;
- цилиндрический триггер указанного радиуса и высоты;
- триггер в форме параллелепипеда заданного размера по осям.
Для обнаружения срабатывания триггера физический объект должен иметь как физическое тело (с маской Physical, которая соответствует маске Physical триггера) и коллизионную форму (с маской Collision, которая соответствует маске Collision триггера).
Также можно указать маску Exclusion для Physical Trigger, которая используется для предотвращения обнаружения столкновений с другими формами (shapes). Эта маска не зависит от маски Collision.
- Для тела с формой (shape) маска Exclusion может быть установлена на вкладке Physics панели Parameters.
- Для Physical Trigger маска может быть установлена через API C++, C# или UnigineScript .
Чтобы избежать обнаружения столкновений между фигурой и Physical Trigger, должно быть выполнено одно из следующих условий:
- Маска Collision, установленная для формы, должна не совпадать с маской Collision из Physical Trigger.
- Маска Exclusion, установленная для формы, должна совпадать с маской Exclusion из Physical Trigger. Если маски Exclusion совпадают, то маски Collision этих нод учитываться не будут.
Физические объекты, участвующие в контакте с Physical Trigger, можно получить через API. Также можно получить конкретную форму (shape) такого объекта. Кроме того, вы можете получить глубину проникновения объекта, координаты точки контакта и нормали к ней.
Смотрите также#
- Класс PhysicalTrigger для управления нодами Physical Trigger через API
Набор сэмплов в папке data/samples/physicals:
- trigger_00
- trigger_01
- trigger_02
- Фрагмент из видеоурока по физике, демонстрирующий Physical Trigger
- Видеоурок Как обнаружить физический объект при помощи Physical Trigger
Добавление Physical Trigger#
Чтобы добавить Physical Trigger в сцену через UnigineEditor:
- Запустите проект с UnigineEditor.
-
В главном меню выберите Create -> Logic -> Physical Trigger.
-
Щелкните где-нибудь в мире, чтобы разместить файл Physical Trigger.
Новая нода Physical Trigger будет добавлена в UnigineEditor, и вы сможете редактировать ее через окно Parameters. По умолчанию создается сферический триггер с радиусом 1.
Редактирование физического триггера#
В разделе Physical Trigger (окно Parameters → вкладка Node) вы можете настроить следующие параметры физического триггера:
Edit Size |
Переключает режим редактирования для ноды Physical Trigger. При включении размер или радиус ноды (в зависимости от его тип ) можно изменить: каждая сторона / ось выделяется цветным прямоугольником / кружком. Чтобы изменить размер / радиус, перетащите соответствующий прямоугольник / круг. Редактирование сферического физического триггера
|
---|---|
Physical Mask | Маска Physical для Physical Trigger должна совпадать с маской Physical физического объекта. В противном случае Physical Trigger не будет запускать обратные вызовы, когда объект входит или выходит из него. |
Collision Mask | |
Type | Тип Physical Trigger: sphere, capsule, cylinder или box. |
Size |
Размер Physical Trigger, а именно:
|
Обработка событий#
Чтобы выполнять определенные действия, когда физические объекты входят в триггер или выходят из него, следует создать функцию-обработчик, которая получает Body в качестве первого аргумента и реализует нужные действия. Затем нужно подписаться на события Enter и/или Leave и вызвать connect().
// subscribe to Enter event when a body enters the physical trigger with your handler
physicalTrigger->getEventEnter().connect(enter_event_handler);
// subscribe to Leave event when a body leaves the physical trigger with your handler
physicalTrigger->getEventLeave().connect(leave_event_handler);
// subscribe to Enter event when a body enters the physical trigger with your handler
physicalTrigger.EventEnter.Connect(enter_event_handler);
// subscribe to Leave event when a body leaves the physical trigger with your handler
physicalTrigger.EventLeave.Connect(leave_event_handler);
Информация, представленная на данной странице, актуальна для версии UNIGINE 2.19.1 SDK.