Portal — туториал по созданию напольной кнопки

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

Этот туториал покажет вам пошаговый процесс создания напольной кнопки, которая очень часто встречается в тестовых камерах игры 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
Checkbox-off.png Physics Objects
Checkbox-on.png 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
Checkbox-on.png Physics Objects
Checkbox-off.png Clients


Фильтр для куба

Если вы предварительно уже создали на своей карте раздатчик, у вас уже должна быть эта сущность. Ежели вы не делали этого, создайте сущность filter_activator_name. Параметр Name поставьте в значение filter_boxes, а в параметр Filter Name впишите имя вашего утяжелённого грузового куба:

Property Name Value
Name filter_boxes
Filter Name [имя куба]


Outputs для триггеров

Добавьте следующие Outputs к floor_button_trigger_player:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnEndTouchAll floor_button_door Close   0.00 No
Io11.png OnEndTouchAll floor_button_trigger_box Enable   0.00 No
Io11.png OnTrigger floor_button_door Open   0.00 No
Io11.png OnTrigger floor_button_trigger_box Disable   0.00 No


Теперь добавим Outputs для floor_button_trigger_box:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnEndTouchAll floor_button_door Close   0.00 No
Io11.png OnEndTouchAll floor_button_trigger_player Enable   0.00 No
Io11.png OnTrigger floor_button_door Open   0.00 No
Io11.png OnTrigger floor_button_trigger_player Disable   0.00 No


Звуки при взаимодействии

Звуки При Взаимодействии

Создайте две сущности класса 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
Io11.png OnClose button_up PlaySound   0.00 No
Io11.png 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.