Создание напольной кнопки, соединенной с дверью

From Valve Developer Community
Jump to: navigation, search
English (en)français (fr)русский (ru)
... Icon-Important.png
Icon-broom.png
This article or section needs to be updated to include current information regarding the subject.
Remember to check for any notes left by the tagger at this article's talk page.
Info content.png
This page needs to be translated.

This page either contains information that is only partially or incorrectly translated, or there isn't a translation yet.
If this page cannot be translated for some reason, or is left untranslated for an extended period of time after this notice is posted, the page should be requested to be deleted.

Also, please make sure the article tries to comply with the alternate languages guide.
Финальный результат

В этом туториале вы научитесь создавать 1500-Мегаваттную Экспериментальную Сверхпрочную Сверхударную Сверхкнопку, которая открывает определенную дверь,если на неё наступит игрок или если на ней окажется утяжеленный куб.

Установка двери

Сперва сделаем дверь, которая будет открываться при нажатии на кнопку.

Рамка двери

Создайте prop_static в проёме. В World Model выставьте "models/props/door_01_frame_reference.mdl" или "models/props/door_01_frame_wide_reference.mdl" (работают оба варианта).

Tip.pngTip:Вместо "All Mods" в Mod Filter выберите "portal", затем в поле Filter textbox at the bottom type "props\door" без кавычек.

Двери

Размещение func_door.

1. Создайте prop_dynamic со следующими настройками:

Property Name Value
World Model models/props/door_01_lftdoor_reference.mdl
Name door_left_model

Установите её в левой внутренней части дверной рамки.

2. Создайте прямоугольный браш с размерами 56Lx8Wx104H и с текстурой nodraw. Разместите его во внутренней центральной части модели двери. Переведите его в энтити func_door, выбрав в выпадающем списке "Tie to Entity". Энтити func_door должна иметь следующие параметры:

Property Name Value
Name door_left
Speed 250
Stop Sound Doors.FullClose8
Delay before Reset -1
Lip 12
Move Direction (Зависит от расположения двери.)

Также убедитесь, что в Flags вы убрали галочку у пункта Touch opens.

3. Выберите Move Direction в Properties Dialog. Когда вы перевели браш в func_door, свойство Move Direction было задано как 0 0 0. Нас интересует только Yaw (второе число), которое может быть изменено путем перетаскивания указателя в Angle Compass Hammer AngleCompass.png или вводом угла в тексовое поле слева. Обычно используются углы 0, 90, 180 и 270, при которых дверь движется вправо, вверх, влево или вниз соответственно в окне "2D top (x/y)".

Tip.pngTip:Выберите "Point At" и затем кликните в 3D виде на точку, куда должна двигаться дверь. Появится новое свойство "angles" и в 2D видах появится линия, отображающая движение к этой точке. Для ручного редактирования свойства "angles" необходимо отключить SmartEdit Mode в Properties Dialog.
Note.pngNote:Вы также можете изменить свойство Blocking damage - это урон, наносимый игроку, когда он застревает между дверями. Также, можно активировать свойство Forced Closed, чтобы игрок не мог заблокировать дверь утяжелённым кубом или камерой наблюдения.
Готовая дверь.

4. Повторите шаги 1-3, но с иными настройками: Для prop_dynamic:

Property Name Value
World Model models/props/door_01_rtdoor_reference.mdl
Name door_right_model

И для func_door:

Property Name Value
Name door_right
Move Direction (Значение, противоположное значению у левой двери)

5. Выставьте у door_left_model (prop_dynamic) в свойстве Parent "door_left". У door_right_model в этом же свойстве пропишите "door_right".

Кнопка

Модели

Размещение моделей кнопки.

1. Создайте prop_static. В World Model выставьте "models/props/button_base_reference.mdl". Это будет основание кнопки.

Tip.pngTip:Вращайте основание кнопки, пока картинка с подсказкой Hammer PortalButtonInstruction.png не окажется со стороны подхода игрока.

2. Создайте prop_dynamic на вершине prop_static со следующими настройками:

Property Name Value
World Model models/props/button_top_reference.mdl
Name button_top_model

Движение

1. Теперь создайте 8-угольный цилиндрический браш с размерами 58Wx58Lx9H и с текстурой nodraw. Переместите этот браш прямо под prop_dynamic. Переведите цилиндр в func_door со следующими настройками:

Property Name Value
Name button_top_door
Speed 25
Delay before Reset -1
Move Direction 90 0 0 (или Down)

Также убедитесь, что в Flags вы поставили галочку у пункта Passable.

2. В свойстве Parent у button_top_model выставьте "button_top_door".

Триггеры

Большой trigger_multiple.

1. Создайте прямоугольный браш с размерами 48Wx48Lx1H и с текстурой trigger. Расположите его на вершине button_top_model. Переведите его в trigger_multiple со следующими настройками:

Property Name Value
Name button_trigger_player

Раздел Outputs мы настроим позднее. Также убедитесь, что в Flags галочка стоит только у пункта Clients.

Маленький trigger_multiple.

2. Теперь создайте 8-угольный цилиндрический браш с размерами 7Wx7Lx2H и с текстурой trigger. Разместите этот браш в центре вершины button_top_model и переведите в trigger_multiple со следующими настройками:

Property Name Value
Name button_trigger_box

В Flags галочка должна стоять только у пункта Physics Objects.

Раздел Outputs мы настроим позднее.

3. Создайте filter_activator_name неподалеку от вашей кнопки и выставьте следующие настройки:

Property Name Value
Name button_filter_boxes
Filter Name (Имя вашего утяжелённого куба)
Note.pngNote:Если у вас ещё нет утяжелённого куба, создайте энтити prop_physics с моделью models/props/metal_box.mdl

4. Выберите ваш button_trigger_box и выставьте в Filter Name "button_filter_boxes".

5. Создайте два энтити ambient_generic и выставьте в одной следующие настройки:

Property Name Value
Name button_down
Sound Name Portal.button_down
Source Entity Name button_top_model

А в другой следующие:

Property Name Value
Name button_up
Sound Name Portal.button_up
Source Entity Name button_top_model

6. Вновь выберите браш func_door, находящийся под кнопкой, и в Outputs пропишите следующее:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnClose door_left Close <none> 0.00 No
Io11.png OnClose door_right Close <none> 0.00 No
Io11.png OnClose button_up PlaySound <none> 0.00 No
Io11.png OnOpen door_left Open <none> 0.00 No
Io11.png OnOpen door_right Open <none> 0.00 No
Io11.png OnOpen button_down PlaySound <none> 0.00 No

7. Выберите большой trigger_multiple ("button_trigger_player") и в Outputs пропишите следующее:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnEndTouchAll button_trigger_box Enable <none> 0.00 No
Io11.png OnEndTouchAll button_top_door Close <none> 0.00 No
Io11.png OnStartTouch button_trigger_box Disable <none> 0.00 No
Io11.png OnStartTouch button_top_door Open <none> 0.00 No

8. Выберите маленький цилиндрический trigger_multiple ("button_trigger_box") и в Outputs пропишите следующее:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnEndTouchAll button_trigger_player Enable <none> 0.00 No
Io11.png OnEndTouchAll button_top_door Close <none> 0.00 No
Io11.png OnStartTouch button_trigger_player Disable <none> 0.00 No
Io11.png OnStartTouch button_top_door Open <none> 0.00 No
Финальный результат.

9. Наконец, создайте энтити light под вершиной кнопки, но внутри основания. Пропишите следующие настройки:

Property Name Value
Brightness 251 159 57 30
BrightnessHDR 251 159 57 20

Теперь созданная вами кнопка будет открывать дверь, когда игрок наступает на неё, или когда на ней оказывается утяжелённый куб.

Создание дверонго проема

Хотя этот шаг необязателен, и ваша дверь всё равно будет нормально работать, ваша карта будет выглядеть странно с дверью без стен по бокам. Этот шаг довольно прост, так что рекомендуется ознакомится со следующим туториалом: Создание дверного проема.

Также, можно воспользоваться следующей заготовкой: Creating a button and door/DoorFrame.vmf.

Теория

Это один из простейших вариантов установки двери и кнопки. Однако, используя её вариации, можно достичь самых разнообразных результатов. Также, для поддержания стиля Portal, не забудьте добавить индикаторную линию.

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

Дополнительные ссылки