Portal — туториал по созданию напольной кнопки
Этот туториал покажет вам пошаговый процесс создания напольной кнопки, которая очень часто встречается в тестовых камерах игры Portal. Напольная кнопка может активироваться утяжелённым грузовым кубом или игроком, стоящим на ней. Также она может использоваться, как триггер, для активации дверей, платформ и лифтов.
Создание кнопки
Основа под кнопку
Создайте браш с размерами 128д × 128ш × 8в и превратите его в func_detail (Ctrl+T). Примените текстуру signage/hazard_orange_03b к боковым сторонам основы, на верхнюю сторону примените текстуру concrete/concrete_modular_floor001a, а к нижней стороне — tools/toolsnodraw.
Оверлеи для углов
Создайте четыре оверлея с текстурой signage/overlay_button_accent на верхней стороне основы. Разместите их так, как показано на соответствующей иллюстрации справа.
Нижняя модель кнопки
Создайте сущность prop_static и поменяйте у неё параметр World Model на models/props/button_base_reference.mdl. Разместите её посередине относительно верхней части основы. Поверните модель так, чтобы значок с коробкой и стрелочкой был сразу виден при входе в комнату.
Брашевая дверь
Создайте восьмигранный цилиндр над основой со размерами 60д × 60ш × 8в, покрыв его текстурой tools/toolsnodraw. Разместите его в том же месте, что и нижняя модель. Превратите браш в сущность func_door. Зайдите во вкладку Flags и убедитесь, что все чекбоксы отключены. Затем задайте следующие параметры у сущности:
| Property Name | Value |
|---|---|
| Name | floor_button_door |
| Speed | 25 |
| Delay Before Reset | -1 |
| Move Direction | 90 0 0 |
Верхняя модель кнопки
Создайте сущность prop_dynamic. Поменяйте параметр World Model на models/props/button_top_reference.mdl; поставьте параметр Pitch Yaw Roll (Y Z X) в то же значение, что и у нижней модели; наконец, поменяйте параметр Parent на floor_button_door. Осталось разместить эту модель в том же месте, что и основу. Учтите, что верх кнопки должен быть размещён на 2 юнита выше относительно основы.
Триггеры для нажатий
Вот и настала самая сложная часть — правильное создание триггеров. Здесь используется два триггера: один для куба и другой для игрока.
Триггер для игрока
Создайте браш с размерами 48д × 48ш × 2в, покрытый текстурой tools/toolstrigger. Превратите браш в сущность trigger_multiple, поставьте параметр Name в значение floor_button_trigger_player и перейдите на вкладку Flags, чтобы убедиться: отмечен только один чекбокс — Clients.
Ключевые значения и вкладка Flags должны выглядеть так:
| Property Name | Value |
|---|---|
| Name | floor_button_trigger_player |
| Flag | ||||
| Physics Objects | ||||
| Clients | ||||
Триггер для куба
Затем, создайте восьмигранный цилиндр с размерами 8д × 8ш × 2в, так же покрашенный в текстуру tools/toolstrigger. Разместите новосозданный объект в том же месте, что и floor_button_trigger_player brush и превратите его в сущность trigger_multiple. Поменяйте параметр Name на floor_button_trigger_box и убедитесь, что отмечен только один чекбокс — Physics Objects. Далее, смените параметр Filter Name на filter_boxes. Ключевые значения и вкладка Flags должны выглядеть так:
| Property Name | Value |
|---|---|
| Name | floor_button_trigger_box |
| Filter Name | filter_boxes |
| Flag | ||||
| Physics Objects | ||||
| Clients | ||||
Фильтр для куба
Если вы предварительно уже создали на своей карте раздатчик, у вас уже должна быть эта сущность. Ежели вы не делали этого, создайте сущность filter_activator_name. Параметр Name поставьте в значение filter_boxes, а в параметр Filter Name впишите имя вашего утяжелённого грузового куба:
| Property Name | Value |
|---|---|
| Name | filter_boxes |
| Filter Name | [имя куба] |
Outputs для триггеров
Добавьте следующие Outputs к floor_button_trigger_player:
Теперь добавим Outputs для floor_button_trigger_box:
Звуки при взаимодействии
Создайте две сущности класса ambient_generic около кнопки.
У первой задайте такие параметры:
| Property Name | Value |
|---|---|
| Name | button_down |
| Sound Name | Portal.button_down |
| SourceEntityName | floor_button_door |
У второй задайте следующие параметры:
| Property Name | Value |
|---|---|
| Name | button_up |
| Sound Name | Portal.button_up |
| SourceEntityName | floor_button_door |
Затем, добавим следующие Outputs к floor_button_door:
| My Output | Target Entity | Target Input | Parameter | Delay | Only Once | |
|---|---|---|---|---|---|---|
| OnClose | button_up | PlaySound | 0.00 | No | ||
| OnOpen | button_down | PlaySound | 0.00 | No |
Освещение
Создайте сущность класса light по середине нижней модели, на 8 юнитов выше относительно основы. Задайте следующие параметры для света:
| Property Name | Value |
|---|---|
| Brightness | 251 159 57 30 |
| BrightnessHDR | 251 159 57 20 |
Теперь кнопка полностью готова, можно внедрять её на вашу карту
Внедрение
Поместите кнопку там, где она и должна быть. Осталось добавить Outuputs, запускающие что-либо при активации кнопки. Outuputs, запускающие что-либо при активации кнопки, должны быть добавлен к Outuput'у OnOpen у floor_button_door, а при деактивации кнопки — OnClose.