САЙТ В ПРОЦЕССЕ РАЗРАБОТКИ
Главное меню сайта
Делаем сами
настройки игры
качаем общие файлы
качаем для клиента
качаем для сервера
качаем проги и др.
трюки
разное
 двери


Сдвигающиеся и вращающиеся двери
В этой статье мы расскажем как создаются двери, сдвигающиеся в сторону и вращающиеся. Также мы рассмотрим способы открытия дверей при помощи кнопок и триггеров. Перед прочтением статьи рекомендуем ознакомиться со следующими энтити-объектами:
func_door
func_door_rotating
func_button
trigger_multiple
1. Сдвигающиеся двери
Наиболее просто изготовить сдвигающуюся в сторону дверь. С такого типа дверей мы и начнем.
Активировать, т.е. открывать сдвигающуюся дверь можно несколькими способами, вот основные из них:
– дотрагиванием до двери или нажатием на «Use» (по умолчанию «E»)
– кнопкой
– триггером
a) открытие двери дотрагиванием
Предположим мы хотим создать дверь в этом проеме (см. рис. ниже). Для этого выберем подходящую текстуру двери (например, C1A0B_DR4A) и построим браш по размерам равный проему. Следует заметить, что стандартными размерами дверей в Half-Life являются 96х64х8 (т.е. 96 юнитов по высоте, 64 по ширине и 4 или 8 по толщине). Естественно это не строгое правило.

Теперь выделим браш и превратим его [Ctrl-T] в энтити-объект func_door. Дверь готова! Осталось только определить ее свойства, такие как: направление и скорость движения, звуки при движении и остановке, время до автоматического закрытия и т.д.
Angle — здесь указывается направление движения двери. Чтобы правильно его определить, поставьте вид сверху (2D top), тогда движение налево будет соответствовать 180°, направо — 0°. Если необходимо, чтобы дверь поднималась вверх или опускалась вниз, то выберите в списке Up или Down соответственно;
Speed — скорость движения двери (по умолчанию 100, нормальная скорость);
Move Sound — звук при движении двери, можно не указывать;
Stop Sound — звук остановки двери, также можно не указывать;
Delay before close — время в секундах, в течении которого дверь будет открыта, потом она автоматически закроется. Если необходимо чтобы дверь не закрывалась поставьте здесь значение «-1» или фо флагах отметьте «Toggle» (см. ниже). По умолчанию дверь закрывается через 4 секунды.
Health (shoot open) — «прочность» двери. Если указать значение больше нуля (> 0), то дверь откроется, только после нанесения ей указанного значения повреждений. Например, если указать Health = 100, то дверь откроется после 4-5 выстрелов из автомата. По умолчанию значение 0.
Lip — этим параметром можно изменить расстояние, на которое открывается дверь. По умолчанию дверь открывается на свою ширину, т.е. если дверь имеет ширину 64 юнита, то и откроется она на 64 юнита. Формула очень простая: Расстояние = (Ширина двери - Lip), т.е. если параметр Lip положительный, то дверь откроется на расстояние меньшее своей ширины, а если — отрицательный, то, соответственно, на большее.
Для чего нужен Lip? Когда дверь открывается полностью, то ее видимая боковая сторона совпадает со стеной, в которую дверь задвинулась, что создает не очень красивый эффект (попробуйте :). Если задать параметр Lip, скажем, в 2 юнита, то дверь будет выглядывать из стены на 2 юнита, и некрасивого эффекта уже не будет.
Остальные параметры не так важны.
Теперь рассмотрим флаги.
Starts Open — отметьте этот флаг, если необходимо, чтобы дверь была открыта в начале раунда
Passable — через дверь можно будет проходить (врядли нужно для нормальной двери)
Toggle — если у двери есть имя (Name), то ее можно будет открывать и закрывать при помощи кнопки или триггера (см. ниже). Дверь с установленным флагом Toggle не будет автоматически закрываться
Use Only — если отметить, то дверь будет открываться только при нажатии на «Use» (по умолчанию кнопка «E»).
б) открытие двери нажатием на кнопку
Дверь, рассмотренная выше, открывается при дотрагивании до нее. Рассмотрим теперь открытие двери от нажатия кнопки.
Изготовьте точно такую же дверь. Единственным отличием этой двери от рассмотренной выше будет наличие имени (Name). Чтобы дверь можно было открывать кнопкой, ей необходимо присвоить какое-нибудь имя, например, sliding_door1.
Теперь изготовим собственно кнопку. Кнопкой у нас будет браш с размерами 12х12х4 юнита (см. рис. ниже), окрашенный текстурой +0BUTTON1 и расположенный на стене рядом с дверью. Естественно простой браш работать не будет, поэтому превратим его [Ctrl-T] в кнопку func_button.

Свойства кнопки в данном случае очень простые:
Targetted object — sliding_door1 (здесь мы указываем, что при нажатии кнопки будет открыта дверь по имени sliding_door1)
Delay before reset — время в секундах, в течении которого кнопка не будет действовать, после того, как была нажата. По умолчанию: 3 секунды, можно поставить 0.
Флаги:
Don't Move — если отметить этот флаг, то кнопка не будет вдавливаться в стену, но активация двери все же произойдет. Естественно, если Вы хотите, то можете не отмечать этот флаг, но тогда необходимо будет указать в парметре «Angle» направление движения (вжатия) кнопки, скорость и т.д.
в) открытие двери прохождением через триггер
Триггеры в игре невидимы. При прохождении игрока через триггер, активируется объект, указанный в его свойствах. Эту возможность мы и используем для открытия двери.
Итак, дверь у нас уже есть. Назовем ее sliding_door2. Теперь создадим браш, окрашенный специальной текстурой AAATrigger и разместим его в центре двери (см. рис. ниже).

Браш необходимо делать немного бОльшим, чем дверь, чтобы игрок касался его с любой стороны двери (см. вид top (x/y) на рис. выше).
Выделите браш и нажмите [Ctrl-T], в списке выберите trigger_multiple. Данный тип триггера позволяет активировать объект многократно.
Выставим свойства триггера.
Target — sliding_door2 (здесь указывается имя двери, которую будет открывать триггер);
Delay before reset — время в секундах, в течении которого триггер работать не будет после того, как был активирован. По умолчанию 10 секунд, однако в нашем случае с дверью, наилучшим будет значение 0, чтобы дверь открывалась всегда, когда игрок проходит через триггер.
Delay before trigger — время в секундах, до активации объекта (до открытия двери). Например, если здесь указать 5 секунд, то дверь будет открыта только через 5 секунд, после прохождения игрока через триггер. Для двери лучше поставить 0 секунд, чтобы дверь открывалась мгновенно, без задержек.
Остальные параметры можно не изменять. Все — дверь готова. Когда игрок пройдет через триггер (причем не важно с какой стороны, ведь триггер "выглядывает" с двух сторон двери), дверь откроется.

2. Вращающиеся двери
Враающиеся двери немного сложнее в изготовлении и имеют больше свойств, но ничего страшного нет :)
a) открытие двери дотрагиванием
Изготовьте браш, который будет дверью.
Так как дверь (в данном случае) вращающийся объект, то для нее необходимо определить ось вращения. Делается это при помощи ORIGIN-браша, т.е. браша со всех сторон окрашенного специальной текстурой ORIGIN.
Необходимо правильно размещать ORIGIN-браш, т.к. от этого зависит как дверь будет вращаться. Чтобы при открытии дверь «не вьезжала» в стену, ORIGIN-браш должен располагаться на виде сверху так, как показано на рисунке ниже.

Обратите внимание, что центр ORIGIN-браша расположен посередине толщины двери (видно на виде сверху), и расстояние от края двери до этого центра равно половине толщины двери. Размеры ORIGIN-браша роли не играют. Это может быть совсем маленький браш, а может и большой.
Выделите дверь (пока что дверь это простой браш) и ORIGIN-браш (во время выделения зажмите клавишу Ctrl), нажмите [Ctrl-T] и в списке выберите func_door_rotating. Дверь готова! Все что остается сделать - это определить параметры вращения двери. Большинство параметров совпадает с параметрами сдвигающей двери func_door, поэтому рассмотрим только новые.
Distance (deg) — угол поворота двери в градусах. По умолчанию дверь поворачивается на 90 градусов, что вполне нормально.
Теперь рассмотрим флаги.
Starts Open — если отметить, то дверь в начале раунда будет открыта;
Reverse Dir — по умолчанию дверь открывается «от игрока», если отметить этот флаг, то она будет открываться «на игрока». В случае с открытием двери кнопкой или триггером этот флаг просто меняет направление открытия двери на противоположное;
Passable — если отмечено, то через дверь можно будет свободно проходить;
One-way — дверь будет открываться только в какую-то одну сторону (независимо от того, с какой стороны подошел к ней игрок);
Toggle — если у двери есть имя и открытие происходит от кнопки или триггера, то она не будет автоматически закрываться. Чтобы закрыть дверь, нужно будет повторно нажать на кнопку или пройти через триггер;
X-Axis, Y-Axis — этими флагами определяется ось, относительно которой будет вращаться дверь. По умолчанию, если ничего не отмечать, дверь вращается вокруг вертикальной оси Z, т.е. как обычно. Подробнее о выборе оси вращения Вы можете прочитать в статье «Вращающийся свет». В этой статье рассмотрен принцип определения оси вращения, который может быть применен к любому вращающемуся объекту;
Use Only — если отметить этот флаг, то дверь будет открываться только от нажатия на «Use» (по умолчанию кнопка «E»).
б) открытие двери от кнопки или триггера
Способы создания открывающейся двери от кнопки и от триггера абсолютно такие же, как и для сдвигающейся двери, поэтому описывать их повторно не будем. Единственное, не забывайте включать в состав вращающейся двери ORIGIN-браш и правильно определяйте его местоположение.

 Двери со стеклом
В этой статье мы рассмотрим создание дверей со стеклом, как сдвигающихся, так и вращающихся. Мы предполагаем, что Вы хорошо освоили создание обычных дверей этих двух типов, а также поняли принцип действия триггера trigger_multiple.
1. Сдвигающиеся двери со стеклом
Опять же, как и в случае с обычными дверями, сдвигающуюся дверь со стеклом изготовить проще, чем вращающуюся, поэтому начнем с этого типа.
Почему же мы не можем просто сделать дверь со вставкой из стекла? Дело в том, что дверь должна быть непрозрачной, а стеклянная вставка наоборот прозрачной. А один и тот же объект не может быть прозрачным в одной части и непрозрачным в другой. Придется прибегнуть к некой хитрости.
На самом деле мы создадим две двери: одну в виде двери с отверстием, другую как стеклянную вставку. Чтобы возникла иллюзия одной двери, мы дадим дверям одинаковые имена и будем активировать их одновременно одним триггером. Итак, приступим к обману простого игрока, думающего, что дверь одна! :)
Построим дверь с размерами 96х64х8 юнитов с отверстием 48х36 юнитов. Для закраски мы использовали текстуру FIFTIES_DR9. Чтобы текстура хорошо подходила, толщину (высоту) верхней балки двери мы сделали 6 юнитов, а двух боковых — по 8. В итоге наша дверь будет состоять из 4-х отдельных брашей (см. рис. ниже).

Выставим следующие свойства:
Name — sliding_door1 (это имя мы будем использовать для открытия двери, а точнее двух дверей одновременно триггером);
Move sound — pneumatic (звук при движении двери, можно не указывать);
Delay before close — 4 (через 4 секунды дверь закроется автоматически);
Lip — «2» (дверь будет «выглядывать» из стены на 2 юнита в открытом положении);
Speed — 100 (скорость движения двери, по умолчанию);
Также не забудьте определить в «Angle» правильный угол, который устанавливает направление движения двери. У нас получился угол 0 градусов, т.к. дверь сдвигается вправо на виде сверху.
Первая дверь готова. Теперь сделаем вторую (прозрачную в игре) дверь (см. рис. ниже). Будем использовать текстуру GLASSGREEN (на рисунке практически черная). Размеры второй стеклянной двери естественно равны размерам отверстия. В нашем случае 48х36х8 юнитов.

Выставьте точно такие же свойства как и для первой двери (т.е. тот же угол, то же имя sliding_door1, delay before close: 4, speed: 100). Остальные свойства следует изменить.
Move sound — No sound (второй звук открывающейся двери нам не нужен — он уже задан для первой двери);
Render Mode — Texture (этот режим необходим, чтобы стекло стало прозрачным);
FX Amount — 80 (чем ближе значение к 0, тем стекло прозрачнее и наооборот, чем ближе к 255, тем — непрозрачней);
Lip «-14» (минус 14);
Почему именно такой Lip? Так как ширина у дверей разная, то и Lip должен быть разным. У стеклянной двери он должен быть больше (т.е. отрицательным). Если Lip у стеклянной двери будет отрицательным, то она продвинется дальше, чем на расстояние своей ширины.
Нам необходимо указать такой Lip для стеклянной двери, чтобы она, задвинулась в стену и при этом не изменила своего положения по отношению к основной двери. Посмотрите на рисунок ниже.

Это вид сверху. Черное — основная дверь («рамка»), розовое — внутренняя стеклянная дверь, серое — стенка. Итак, искомый Lip будет равен расстоянию со знаком вопроса минус Lip основной двери («рамки»).
Теперь необходимо изготовить триггер, который будет активировать обе двери одновременно (см. рис. ниже). Используем для этого trigger_multiple, как и в случае с простыми дверями.

В свойствах триггера в «Target» запишем имя дверей (оно одинаковое), а также выставим «Delay before reset»: 0.
Сдвигающаяся дверь со стеклом готова!

2. Вращающиеся двери со стеклом
Принцип построения вращающихся дверей со стеклом точно такой же. Основная трудность заключается в правильном определении места положения ORIGIN-брашей.
На рисунке ниже Вы можете видеть дверь, состоящую из 7 брашей и имеющую 2 отверстия для стекол (примечание: такую дверь можно изготовить и из 5-ти брашей, но это не принципиально). Размеры двери, как и в первом случае 96х64х8 юнитов, толщина «рамки» везде по 8 юнитов.
Так как дверь вращающаяся, то необходимо определить ORIGIN-брашем центр вращения. ORIGIN-браш мы разместили в верхней половине двери (см. рис. ниже). Это сделано для удобства — внизу будет ORIGIN-браш стеклянной (внутренней) двери.

На виде сверху хорошо видно положение центра ORIGIN-браша (см. рис. ниже). При таком расположении дверь будеть правильно открываться в обе стороны, не въезжая в стену (косяк). Стрелками показаны обе двери: и внутренняя стеклянная (пока что мы ее не сделали) и внешняя («рамка»).

Чтобы сделать дверь, выделите с зажатым Ctrl все 7 брашей и ORIGIN-браш. Затем нажмите [Ctrl-T] и в списке выберите func_door_rotating.
Выставим для двери следующие свойства:
Nam — rotating_door1 (это имя мы будем использовать для открытия двери, а точнее двух дверей одновременно триггером);
Move sound — vacuum (звук при движении двери, можно не указывать);
Delay before close — 4 (через 4 секунды дверь закроется автоматически);
Distance (deg) — 90 (угол поворота двери);
Speed — 100 (скорость движения двери, по умолчанию);
Теперь создадим вторую (стеклянную) дверь (см. рис. ниже). Она будет состоять из 2-х отдельных брашей, имеющих размеры отверстий (в нашем случае отверстия одинаковые — по 48х36 юнитов). ORIGIN-браш разместим в нижней части двери и на виде сверху (см. рис. выше) совместим с первым ORIGIN-брашем. Это необходимо сделать, т.к. оси вращения должны совпадать.

Выделите оба браша-стекла и ORIGIN-браш и также превратите [Ctrl-T] в func_door_rotating. Дайте второй двери точно такое же имя, как и первой, т.е. rotating_door1. Скорость, угол поворота и время до закрытия выставьте такие же.
Теперь различия:
Move sound — No sound (второй звук открывающейся двери нам не нужен — он уже задан для первой двери);
Render Mode — Texture (этот режим необходим, чтобы стекло стало прозрачным);
FX Amount — 80 (чем ближе значение к 0, тем стекло прозрачнее и наооборот, чем ближе к 255, тем — непрозрачней).
Все что осталось сделать, это построить trigger_multiple, как и в первой случае. В свойствах в параметр «Target» следует вписать имя обеих дверей (оно одинаково): rotating_door1, а также поставить «Delay before reset»: 0 (чтобы триггер «обнулялся» мгновенно).
Вторая дверь готова! При прохождении через триггер обе двери будут открыты в одном и том же направлении, с одинаковой скоростью и закроются одинаково через 4 секунды.
Не забывайте менять параметры у обеих дверей симметрично, иначе синхронность будет потеряна. Ну, и как всегда, если что-то осталось непонятным, Вы всегда можете скачать нашу карту-пример. В архиве находится как исходник карты в формате RMF, так и уже откомпилированная BSP карта.

 Специальные двери (momentary_door)
В этой статье мы рассмотрим создание дверей, которые открываются по мере того, как игрок вращает вентиль, и автоматически начинают закрываться, когда игрок прекращает вращение. Для создания подобных дверей нам потребуются два новых энтити-объекта:
momentary_door
momentary_rot_button
Дверь momentary_door отличается от уже известной нам сдвигающейся двери func_door лишь тем, что она может быть открыта только объектом momentary_rot_button. Сам же объект momentary_rot_button представляет из себя вращающийся вентиль, который активирует объект (в нашем случае открывает дверь) постепенно, пока он сам активирован (вращается).
Итак, изготовим гаражную дверь, которая будет подниматься вверх от вращения вентиля. Вентиль расположим на стене гаража (см. рис. ниже).

Дверь изготавливается точно так же, как и самая обыкновенная сдвигающаяся в сторону дверь, только после нажатия [Ctrl-T] в списке необходимо выбрать momentary_door вместо func_door. Свойства двери абсолютно такие же, как и у func_door. Ниже приводим основные параметры, которые мы выставили в тестовой карте.
Name — mom_door1 (это имя мы будем использовать, чтобы открывать дверь поворотом вентиля);
Angle — up (дверь поднимается вверх);
Speed — 35 (скорость движения двери, небольшая);
Lip «24» (после подъема, дверь будет высовываться из вертикальной стены на 24 юнита).
Также можно задать какие-нибудь звуки при движении и остановке двери. Остальные параметры оставим как есть.
Флаги:
Toggle — если отметить этот флаг, то дверь будет автоматически опускаться, когда игрок отпустит вентиль.
С дверью разобрались, теперь вентиль. Вентилем может быть любой объект, мы изготовили нечто похожее на настоящий вентиль при помощи манипуляции с вертексами (см. рис. ниже).

Не забудьте при изготовлении momentary_rot_button (вентиля) создать ось вращения, т.е. ORIGIN-браш. Мы сделали довольно маленький ORIGIN-браш, удлинили его вдоль оси вращения (для наглядности) и разместили его ровно в центре вентиля (см. рис. выше).
Когда положение ORIGIN-браша задано, остается только выделить все браши, составляющие вентиль, а также ORIGIN-браш и превратить все это в momentary_rot_button.
В нашем примере мы выставили следующие свойства для momentary_rot_button:
Targetted object — mom_door1 (сюда мы вписали имя двери, которую будет открывать вентиль);
Speed — 30 (скорость вращения вентиля вокруг оси, небольшая);
Sounds — plunger (звук при вращении вентиля);
Distance (deg) — 270 (угол поворота вентиля, выбирается произвольно, по умолчанию 90 градусов);
Auto-return speed — 20 (скорость обратного вращения вентиля, т.е. при закрытии двери).
Флаги:
Auto Return — при отпускании вентиля игроком, он начнет вращаться в противоположную сторону;
Y Axis — здесь определена ось Y в качестве оси вращения вентиля, т.к. в нашем примере на виде сверху ось вращения (не путайте с ORIGIN-брашем, т.к. ORIGIN-браш определяет лишь центр оси вращения, а не направление) располагается вертикально, а следовательно это ось Y.
Все, кнопка, а с ней и вся дверь готова.
Естественно, можно использовать эти два объекта не только для создания дверей. Можно таким же способом изготовить поднимающийся мост или платформу и т.п.

Форма входа
Поиск по сайту
Наш опрос
Оцените наш сайт
Всего ответов: 14
Мини-чат
Статистика

Онлайн всего: 2
Гостей: 2
Пользователей: 0
qwertys © 2025
Сделать бесплатный сайт с uCoz