Переключатели

From Valve Developer Community
< Ru
Jump to navigation Jump to search
English (en)Русский (ru)中文 (zh)Translate (Translate)

Переключатели (Triggers) — это объекты(en), которые реагируют на присутствие других объектов. Объёмные и сеточные переключатели могут быть при создании карты, а программисты могут превратить в переключатель всё что угодно.

Note.pngПримечание: Указание ключ-параметра Angles(углы) позволяет задавать необходимую ориентацию переключателя в игре. Это может быть полезно, но может и раздражать, когда забываешь его удалить.

Создание карт

tools/toolstrigger

Существует много типов объёмных объектов(en) переключателей, которые можно разместить на карте в редакторе Hammer; смотрите Special:PrefixIndex/Trigger с полным перечнем. Наиболее часто используемыми объектами переключателями общего назначения являются trigger_once, trigger_multiple, trigger_look и trigger_proximity. Все они имеют следующие одинаковые свойства и выходы:

tools/toolstrigger
Все грани объёмов объекта переключателя должны быть полностью покрыты этим материалом. В качестве альтернативы с помощью признака %CompileTrigger можно создать собственный материал для переключателей.
Note.pngПримечание: Элементы объекта переключателя можно покрывать материалами без признака %CompileTrigger (переключатели всегда будут нематериальны и невидимы), однако использование %CompileTrigger гарантирует, что не будет посторонних данных в карте освещения.
Filters
Объекты фильтры(en) могут быть использованы для определения объектов на которые будет срабатывать переключатель.
Filter Flags
Существуют признаки объекта(en), которые позволяют выполнять простую фильтрацию без использования дополнительного объекта фильтра.
OnStartTouch (при начале касания)
OnEndTouch (при завершении касания)
Эти выходы срабатывают всякий раз, когда объект, соответствующий всем фильтрам, касается объёма или покидает объём переключателя соответственно, независимо от любых других дополнительных проверок. Объект, который входит или покидает переключатель, будет числиться как ссылка !caller(en).
OnStartTouchAll (при начале касания, индивидуально)
OnEndTouchAll (при начале касания, индивидуально)
Действуют как и предыдущие, но срабатывают только в том случае, если переключателя не касаются другие (удовлетворяющие фильтру) объекты.
OnTouching (если касается)
OnNotTouching (если не касается)
Соответствующий из этих выходов будет срабатывать в ответ на вход TouchTest. Все переключатели поддерживают этот вход, но для большинства он не указан в FGD-файле(en).
OnTrigger (при соответствии)
Срабатывает каждый раз, когда объект соответствует всем критериям переключателя.
Warning.pngПредупреждение: Для trigger_once результат этого выхода отличается от OnStartTouch и OnStartTouchAll. Если повторно срабатывает не восстанавливающийся переключатель, то он удалит себя с карты через 0.1 секунду. Выход OnStartTouch всё равно может повторно сработать в этом промежутке времени.

Смотреть также

Программирование

Все объекты могут реагировать на пересечение с другими объектами (смотрите Touch()(en)). Если нужно учитывать касания без учёта столкновений, то доступны два варианта:

SetSolid(SOLID_NONE) и AddSolidFlags(FSOLID_TRIGGER)
Объект переключателя будет фиксировать касание с предметами, которые походят сквозь него.
CollisionProp()->UseTriggerBounds(true,iBloatSize)
Для объекта будет создан "короб переключатель", который превышает размеры его ограничивающего короба(en) на iBloatSize единиц по осям X/Y и (iBloatSize/2) по оси +Z (-Z остается неизменным). Короб переключатель ориентирован относительно начала координат карты и будет работать независимо от материальности и габаритов столкновений исходного объекта. После ввода команды управления ent_bbox он будет отображаться в виде светло-синих рёбер короба.
Valve использует короб переключатель для всех подбираемых предметов. Размер увеличения их габарита составляет 24 единицы, довольно большая цифра задана для простоты срабатывания соответствующих событий.

Объёмный объект

Чтобы создать новый объект переключатель, который будет использовать для проверки объём своих элементов карты вместо ограничивающего короба, наследуйте класс CBaseTrigger и вызовите метод InitTrigger().