Физический триггер (Physical Trigger)
Physical Trigger - это объект, выполняющий функции обратного вызова, когда физические объекты попадают внутрь или за пределы него. В зависимости от формы существует 4 типа физических триггеров:
- Сферический триггер указанного радиуса
- Капсульный триггер указанного радиуса и высоты
- Цилиндрический триггер указанного радиуса и высоты
- Триггер в форме куба заданного размера по осям
Для обнаружения срабатывания триггера физический объект должен иметь как физическое тело (с маской Physical, которая соответствует маске Physical триггера) и коллизионную форму (с маской Collision, которая соответствует маске Collision триггера).
Также можно указать маску Exclusion для Physical Trigger, которая используется для предотвращения обнаружения столкновений с другими формами (shapes). Эта маска не зависит от маски Collision.
- Для тела с формой (shape) маска Exclusion может быть установлена на вкладке Physics панели Parameters.
- Для Physical Trigger маска может быть установлена через C ++, C # или UnigineScript API .
Чтобы избежать обнаружения столкновений между фигурой и Physical Trigger, должны быть выполнены следующие условия:
- Маска Collision, установленная для фигуры, должна совпадать с маской Collision из Physical Trigger.
- Маска Exclusion, установленная для фигуры, должна совпадать с маской Exclusion из Physical Trigger.
Физические объекты, участвующие в контакте с Physical Trigger, можно получить через API. Также можно получить конкретную форму (shape) такого объекта. Кроме того, вы можете получить глубину проникновения объекта, координаты точки контакта и нормали к ней.
Смотрите также#
- Класс PhysicalTrigger для управления узлами Physical Trigger через API
Набор сэмплов в папке data/samples/physicals:
- trigger_00
- trigger_01
- trigger_02
- Фрагмент из видеоурока по физике, демонстрирующий 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 в качестве своего первого аргумента. Затем используйте метод addEnterCallback() или addLeaveCallback, чтобы указать вызываемую функцию.
// add the enter callback to be fired when a body enters the physical trigger
physicalTrigger->addEnterCallback(MakeCallback(this, &AppWorldLogic::enter_callback));
// add the leave callback to be fired when a body leaves the physical trigger
physicalTrigger->addLeaveCallback(MakeCallback(this, &AppWorldLogic::leave_callback));
// add the enter callback to be fired when a body enters the physical trigger
physicalTrigger.addEnterCallback(enter_callback);
// add the leave callback to be fired when a body leaves the physical trigger
physicalTrigger.addLeaveCallback(leave_callback);