Двигающиеся объекты в UnrealED
Автор: Hruka

Вступление

Если вы бы хотели создать гениальный уровень, то в нем наверняка былы бы такие объекты как двери, лифты, кнопки, рычаги и т.д. Однако, до сей поры, вы ничего не знали о том как создаются эти объекты. Прочитав эту статью вы научитесь основам этого дела. В Unreal существует несколько типов таких объектов, которые объединены в один класс Mover. Я не собираюсь перегружать вас информацией о каждом типе, и расскажу только о простых Mover'ах. В дальнейшем, я напишу вторую часть этой статьи, в которой подробно будут описаны другие типы Mover'ов. Но это все было вступление, а сейчас приступим к делу.

Создание простой двери

Мы начнем с простой комнаты 256x512x512. Сделайте такую комнату, наложите на нее текстуры (я выбрал текстуры из файла starship.utx). Теперь сделайте куб размерами 256x512x32 и поместите его в середину вашей комнаты, чтобы он разделял ее пополам. Добавьте этот браш. Это будет стена, в которую мы поместим нашу дверь. Только нам надо прорезать в ней дырку для нашей двери. Чтобы сделать это, просто вырежьте из нее куб размерами 256x256x32. У вас должно получится примерно вот это:


Теперь мы приступим к созданию собственно двери. Создавать мы ее будем (как и все браши) в строительной комнате. Поэтому создайте ее где-нибудь в стороне, размерами где-то 512x512x512. Переместитесь туда. Итак, размеры нашей дыры для двери были 256x256x32. Значит размеры нашей двери будут 256x256x16 (чуть потоньше, иначе это выглядело бы не очень красиво). Добавьте в строительную комнату куб с такими размерами и наложите на него текстуры двери:

После создания заготовки вашей двери, сделайте куб размерами больше вашей двери и поместите его так, чтобы вся ваша дверь была внутри него, но чтобы кроме этой двери внутри него ничего не было. Теперь примените операцию intersect. Ваш куб примет форму двери. Теперь двигайте этот куб в то место, где должна быть дверь (т.е. в нашу комнату, в дырку в стене)ю Нам осталось превратить наш браш в Mover. Для этого нажмите кнопку Add Movable Brush (). Вы увидите как цвет браша сменился с красного на фиолетовый. Теперь можете отодвинуть красный браш подальше, чтобы не мешался. Теперь нам надо изменить некоторые параметры двери, чтобы она работала как положено. Для этого щелкните правой кнопкой на наш Mover и выберите "Mover properties..." из меню. Для начала раскройте закладку Object и найдите параметр InitialState. Этот параметр показывает, когда наша дверь будет открываться. По умолчанию значение этого параметра BumpOpenTimed. Это значит, что дверь будет открываться, когда игрок подойдет к ней вплотную. Не меняйте пока значение этого параметра, и зайдите в закладку Mover. Вы увидите здесь огромное число параметров. Сначала найдите параметр MoverEncroachType. Этот параметр показывает, что надо делать нашей двери, если во время движения на ее пути появился какой-то объект (например, игрок). По умолчанию здесь стоит ME_ReturnWhenEncroach, т.е. дверь просто вернется в исходное положение при встрече с препятствием. Для нашей двери мы будем использовать установки по умолчанию, хотя для других дверей вы можете изменить MoveTime (время, за которое дверь открывается/закрывается), bTriggerOnceOnly (открывается только один раз и остается открытой), bUseTriggered (для открытия используется триггер). Теперь нам надо указать, в какую сторону будет открываться наша дверь. Для этого используются ключевые кадры (keyframes). Ключевые кадры - это положения Mover'а, на пути его движения. Допустим, что мы хотим чтобы наша дверь открывалась вверх. Тогда первый (базовый) ключевой кадр - это дверь в текущем положении (т.е. закрыта), а второй ключевой кадр - это дверь в открытом положении. Чтобы выбрать номер ключевого кадра, надо щелкнуть правой кнопкой на Mover'е, в меню выбрать Mover Keyframe, и затем номер кадра. В данный момент нам надо установить второй ключевой кадр, так что выберите Mover Keyframe->Key 1. Теперь двигайте вашу дверь вверх, чтобы из потолка торчал только небольшой кусочек:

Теперь выберите опять Key 0 (Base). Вот собственно и все, ваша дверь готова. Если вы в этом сомневаетесь, то можете нажать Ctrl+P и проверить.

Звуки

Как вы уже заметили, у нашей двери есть один недостаток - она не издает звуков. Сейчас мы это поправим. Для начала нам надо загрузить какие-нибудь звуки. Для этого в браузере выберите SoundFX, и загрузите какой-нибуть звуковой package, например DoorsMod (в нем хранятся звуки механических дверей/лифтов). Теперь откройте окно Mover properties и раскройте Mover sounds. Здесь вы видите 5 параметров: ClosedSound (звук, воспроизводящийся когда дверь полностью закрывается), ClosingSound (когда начинает закрываться), MoveAmbientSound(когда движется), OpenedSound (когда полностью открылась) и OpeningSound (когда начинает открываться). Теперь мы назначим этим событиям соответсвующие звуки. Как вы видите справа в окошке браузера, имена звуков имеют вид xxxS, xxxL, xxxE или xxxStart, xxxLoop, xxxEnd. Эти названия означают начало движения, собственно движение и конец движения соответственно. Для нашей двери мы выберем три звука: md6start, md6loop и md6end. В окне Mover properties выберите параметр ClosingSound. Теперь справа в браузере выберите звук md6start. Теперь нажмите кнопку Use напротив параметра ClosingSound. Его значение должно измениться на "Sound'DoorsMod.General.md6start'". Назначьте этот же звук параметру OpeningSound. Теперь назначьте звук md6end параметрам OpenedSound и ClosedSound, и наконец звук md6loop параметру MoveAmbientSound. Вот собственно и все. Можете проверить это нажав Ctrl+P. Если вы сделали уровень не футуристический, а, например, средневековый, то звуки соответствующих дверей можно найти в файле DoorsAnc.

Двойная дверь

С такой же легкостью можно сделать дверь, которая будет открываться влево или вправо - надо всего лишь изменить ее положение во втором ключевом кадре. Давайте сделаем двойную дверь, которая будет состоять из двух половинок, которые будут открываться вправо и влево (как в метро). Сначала сделайте еще одну комнату, точную копию нашей первой комнаты, только без двери, и соедините ее с первой комнатой. Теперь переместитесь в строительную комнату. Сначала мы сделаем обе половинки двери. Сделайте два куба размерами 256x128x16 и поместите их рядом в строительной комнате. Наложите на них текстуры двери:


Теперь превратим наши половинки в Mover'ы. Сделайте куб аналогичный тому, который мы делали для первой двери (чтобы внутри него назодилась одна половинка двери). Нажимайте Intersect. Теперь двигайте этот браш в нашу комнату и нажимайте Add Movable Brush. Также поступите и со вторым брашем. У вас должно получится вот так:

Теперь выберите левую половинку, поставьте второй ключевой кадр (т.к. нумерация ключевых кадров начинается с нуля, вам надо выбрать Mover keyframe->Key 1), и переместите ее влево так, чтобы из стены выступала только небольая часть. Также проделайте и со второй половинкой:

Теперь для обоих половинок верните обратно базоввый ключевой кадр. Нам надо чтобы эти половинки открывались одновременно. Поэтому для открытия двери мы будем использовать триггер. Добавьте объект Triggers.Trigger на пол прямо между дверьми:

Теперь мы настроим триггер и двери. Откройте окно параметров одной половинки двери и раскройте группу Object. Найдите параметр InitialState. Этот параметр показывает, при каком условии дверь должна открываться. У этого параметра есть три значения, предназначенных для работы с триггером - TriggerOpenTimed (открывается когда триггер активируестя, и через некоторое время закрывается), TriggerControl (открыта, когда игрок находится в зоне действия триггера, в противном случае закрыта) и TriggerToggle (активация триггера меняет положение двери - если активировать триггер - открывается, если активировать его еще раз - закрывается). Для нашей двери мы дубем использовать TriggerToggle (если игрок будет стоять рядом с дверью, она будет открыта, если отойдет - закроется). Тепрерь в этом же окне раскройте группу Events и измените параметр Tag на что-нибудь уникальное (например, Slider). Закройте окно и проделайте эти же манипуляции со второй половинкой. Теперь кликните правой кнопокой на триггере и вызовите окно его параметров (если еще не догадались, Trigger properties). Сначала мы увеличим зону действия триггера. раскройте группу Collision и поменяйте значение параметра CollisionRadius на 128. Теперь раскройте группу Events и измениет параметр Event на то значение, которое стоит у ваших половинок в параметре Events->tag (т.е. на Slider). В 2D окнах триггер и обе половинки двери должны соединиться красными линиями. Вот и все. Можете добавить для каждой половинки звуки, и затем нажать Ctrl+P.

Лифты

Последнее о чем я хочу рассказать вам в первой части моей статьи - это о том как делать лифты. В общем то этот процесс не слишком сильно отличается от процесса создания двери. Сначала мы сделаем комнату в которую будет ехать наш лифт. Сделайте комнату 256x512x512 и поместите ее на 16 пунктов (1 клетка) выше нашей второй комнаты. Теперь сделайте дырку размерами 16x128x128 в полу этой комнаты. Туда будет ездить лифт. Теперь переместитесь в строительную комнату. Сделайте площадку лифта размерами 16x128x128 и поместите ее повыше. Площадка по воздуху конечно летать не будет, так что нам нужна опора для нее. сделайте куб размерами 256x64x64 и поместите под площадку:


Теперь делайте куб внутри которого пометится это сооружение, нажимайте Intersect, двигайте этот браш в комнату, прямо под дыру, чтобы на полу была только площадка лифта, а опора была под полом. Нажимайте Add movable brush. Теперь переключайтесь на второй ключевой кадр, и двигайте лифт вверх, пока площадка не войдет в дыру в потолке:

Теперь откройте окно параметров лифта и измените значение параметра Object->InitialState на StandOpenTimed, чтобы лифт поднимался когда на него встанет игрок. Теперь назначьте этому лифту какие-ниюудь звуки, переделывайте уровень. Вот и все. Можете проверить ваш лифт нажав Ctrl+P. Ну а теперь бегите добавлять в вша уровень двери и лифты! И чем больше тем лучше! ;))