Вращающиеся панели

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

Способ A: Func_door_rotating

1. Создайте браш с помощью Hammer block.png Block Tool в нужном размере панели. Не делайте его слишком тонким, так как порталы, размещённые на нём, будут давать помехи. Толщина в 8 единиц достаточно надёжна.

2. Преобразуйте этот новый браш в энтити func_door_rotating(en). В данном руководстве мы назовём её "flip_panel".

3. В зависимости от вашего замысла, настройте ключевые значения:

Имя свойства Значение Комментарии
Name flip_panel Потребуется для подключения входа к панели.
Speed 380 Скорость вращения. Задайте любо значение по желанию. Для вращающейся панели(en) в редакторе головоломок(en) используется 380.
Start Sound a3_jump_intro_rotating_panel_travel_01.wav Вы можете назначить звук, который воспроизведётся, когда панель начнёт поворот. Дополнительную ambient_generic добавлять не нужно.
Stop Sound a3_jump_intro_rotating_panel_arrival_01.wav Звук, который воспроизведётся, когда панель остановится. Добавлять ambient_generic не нужно.
Delay Before Reset (-1 stay) -1 После поворота панель вернётся в исходное положение по истечении определённого количества секунд, что задаётся здесь. Если задать -1, панель не повернётся обратно автоматически, а будет ожидать входа для этого.
Spawn Position Closed Можно задать либо Open, либо Closed. Неважно, какой вариант вы выберите, но дальнейшие входы зависят от того, что здесь указано. В данном руководстве мы выберем Closed.
Distance 180 Это угол, на который панель будет поворачиваться. Наша панель будет поворачиваться задом-наперёд, поэтому выберем значение 180 градусов.

4. Найдите корректную ось поворота. Наш браш поворачивается на 180 градусов, но мы не указали, по какой оси он вращается, поэтому пока он просто меняет свои стороны. Самый лёгкий способ поиска оси описан в статье func_door_rotating(en):

Указание точки вращения

Door rotate 2.jpg

Точку поворота можно задать путём изменения исходной точки энтити. Исходная точка определяет, где проходит ось вращения плоскости, представьте, что это дверная петля. Если в настройках Hammer включен параметр show helpers, исходная точка отображается в виде маленького белого кружка в центре энтити, который можно перетащить на новое расположение.

Итак, нужно найти ось, по которой браш будет вращаться. Лучший способ - подобрать нужный размер сетки и найти тот, который показывает, где именно мы хотим поместить исходную точку. После этого перетащите указатель в верхнюю левую часть вида, чтобы узнать, какой это вид, 1. В этом виде показано только две оси, отсутствующая ось - та, что нам нужна, и в нашем случае это Y. В свойствах объекта двери перейдите к флагам, и установите флажок Y Axis. Кроме того, в двухмерном виде func_door_rotating по умолчанию вращается вокруг точки по часовой стрелке, нам нужно, чтобы она вращалась в другую сторону, поэтому на вкладке флагов в свойствах объекта также установим флажок Reverse Dir. Теперь переместите курсор на исходную точку, 2.


5. Создайте входы, заставляющие панель вращаться. Например, используйте prop_floor_button(en).

My Output Target Entity Target Input
OnPressed flip_panel Open
OnUnPressed flip_panel Close

Видеоролик с демонстрацией

Способ Б: Func_Brush как дочерний элемент вращающейся модели

Вид в Hammer

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

Название свойства Значение
Name trans_panel
Pitch Yaw Roll (X Y Z) 90 0 0
World Model models/anim_wp/simple_panel_transforms/simple_panel.mdl

2. Создайте браш любого желаемого размера (рекомендуется 64x16x64) и присоедините его к модели. Преобразуйте его в энтити func_brush(en) со следующими настройками:

Название свойства Значение
Name trans_brush
Parent trans_panel


3. Создайте logic_auto(en) рядом с созданным брашем (но не слишком близко) и создайте следующие выходы:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnMapSpawn trans_brush SetParentAttachmentMaintainOffset panel_attach 0.00 No
Io11.png OnMapSpawn trans_panel SetAnimation BindPose 0.00 No


4. Создайте энтити ambient_generic(en) со следующими настройками:

Название свойства Значение
Name trans_sound_end
Sound name World.SpeedFlingRotatingPanelStop
Volume 2


5. Вернитесь к энтити prop_dynamic(en) и настройте выход следующим образом:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnAnimationDone trans_sound_end PlaySound 0.00 No


6. Создайте энтити prop_button(en) и настройте выход следующим образом:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnPressed trans_panel SetAnimation rotate_180 0.00 No
Io11.png OnUnPressed trans_panel SetAnimation rotate_180_reverse 0.00 No

Панель будет вращаться вместе с брашем. Вторая строка будет возвращать панель в исходную позицию после задержки.

Вы также можете подключить вращающуюся панель ко входу любого типа. Настройте выходы так:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png <ваш выход> trans_panel SetAnimation rotate_180 0.00 No
Io11.png <ваш выход> trans_panel SetAnimation rotate_180_reverse 0.00 No

Скачать префаб panels_rotate

Демонстрационный видеоролик

Сравнение способов

На первый взгляд настройка func_door_rotating по способу A может показаться сложной, но этот метод имеет преимущество в том, что он экономит две ambient_generic, одну prop_dynamic и множество входов для иерархии и поворота.

Однако, в отличие от способа Б, есть и недостаток: анимация поворота simple_panel имеет "живой" эффект качания панели после поворота, а func_door_rotating после поворота просто останавливается.

См. также