HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Уроки VolatileRadiant (https://hlfx.ru/forum/forumdisplay.php?forumid=28)
-- Урок 6. Создание дверей (https://hlfx.ru/forum/showthread.php?threadid=2553)
Отправлено XaeroX 15-01-2011 в 04:01:
Урок 6. Создание дверей
Урок 6. Создание дверей
Двери – необходимый атрибут любого уровня, будь то научный комплекс или горная деревня с хижинами. Основное их назначение – препятствовать игроку в свободном продвижении по уровням, а также дополнительно делить уровень на зоны видимости. В этом уроке я расскажу, как создавать различные двери на игровых уровнях.
Начнём с простейшей отодвигающейся двери. Создайте браш по размерам дверного проёма, но чуть меньше стен по толщине. Используйте текстуру door_wood_x1 из папки office. Для выравнивания текстуры откройте Surface Inspector и нажмите Fit.

Теперь, сохраняя выделение на браше, вызовите контекстное меню акторов и превратите его в актор Door (группа Doors). Теперь можно настроить параметры нашей двери. Один из самых важных – направление, в котором дверь будет открываться. Оно задается при помощи угла. Допустим, мы хотим, чтобы дверь открывалась влево (если смотреть из освещенной комнаты). Этому соответствует направление «вверх» в проекции XY Top и, следовательно, угол 90. Нажмите кнопку «90» для задания этого направления. Рассмотрим другие параметры двери:
- speed – скорость движения двери. По умолчанию она равна 100 юнитов/сек.
- lip – отступ, который останется после открытия двери. Если он равен 0, то дверь полностью скроется в стене. Если поставить здесь отрицательное значение, дверь «уедет» дальше.
- wait – время ожидания двери в открытом состоянии, в секундах. По умолчанию – 4 сек.
- health – прочность двери. Если значение больше 0, то дверь можно тем или иным способом сломать, иначе – дверь неуязвима (сила двери = БЕСК). Интервалы прочности таковы: 1..25 – дверь можно сломать даже холодным оружием; 26..50 – дверь можно сломать только выстрелами и взрывом; 51..70 – дверь можно сломать только пулями большого калибра (5.56 мм, 7.62 мм и .338MAG) и взрывом; 71..100 – дверь можно только взорвать.
- lock – сила дверного замка. Если значение больше 0, то дверной замок можно взломать, иначе – замок неуязвим (сила замка = БЕСК). Значения могут быть такими: 1 – легкий замок (3 пина, мягкие пружины); 2 – средний замок (5 пинов, пружины средней жесткости); 3 – сложный замок (7 пинов, жесткие пружины), 4 – очень сложный замок (9 пинов, очень жесткие пружины). Помимо значения, нужно еще установить флаг Locked (см. ниже).
- movesnd – звук движения двери, по умолчанию звука нет.
- stopsnd – звук остановки двери, по умолчанию звука нет.
- material – материал, из которого сделана дверь. Это стандартное для многих акторов перечисление: 0 = бетон (по умолчанию), 1 = металл, 2 = дерево, 3 = стекло, 4 = плоть, 5 = пластик.
- gibmodel – для разбиваемых дверей позволяет задать собственную модель осколков. Если это поле оставить пустым, то модель осколков определяется материалом двери.
Все эти параметры кратко поясняются в поле комментария к актору. Кроме параметров, есть и флаги:
- Start open – дверь появляется на карте в открытом положении.
- Toggle – при каждой активации дверь меняет статус – если была открыта, закрывается, иначе – открывается. При этом параметр wait игнорируется.
- Trigger only – дверь можно активировать только триггером, игрок не может открыть ее, нажав «использовать».
- Pawns can’t – NPC не могут сами открыть эту дверь.
- Locked – изначально дверь заперта.
Установите подходящие параметры двери (см. рис.) и посмотрите её в игре. Воспользуйтесь кодом «give all», чтобы получить оружие и отмычку, и попробуйте сломать дверь или разбить.


Теперь перейдем к созданию вращающейся двери. Для начала превратите дверь в «мировой браш» (Selection > Ungroup Actor или одноименная команда в контекстном меню) и снимите с него выделение.
Первое, что надо запомнить – любой вращающийся актор должен иметь ось вращения. Ось задается двумя параметрами – центром вращения и направлением вдоль одной из координатных осей. Центр вращения задается при помощи origin-браша – это обычный браш, покрытый текстурой origin. Его центр как раз и будет центром вращения. Создайте такой браш так, чтобы он был у края двери, вокруг которого будет происходить вращение. Текстура origin находится в папке common, так же можно выполнить команду Textures > Show All (Ctrl+A), чтобы нужный шейдер появился в списке текстур.

Теперь нужно выделить оба браша – дверь и origin-браш, после чего превратите их в актор RotatingDoor (группа Doors). Осталось задать ось, вокруг которой будет вращаться дверь. Это делается с помощью параметра axis, который может принимать следующие значения: 0 = Z, 1 = Y, 2 = X. Так как обычная дверь вращается в плоскости XY вокруг оси Z, то нам не нужно ничего указывать: по умолчанию axis равно 0.
Рассмотрим остальные параметры и флаги актора RotatingDoor, которых нет у Door:
- distance – параметр указывает, на какой угол будет открываться дверь относительно начального положения. По умолчанию это 90 градусов.
- One way – флаг указывает, что дверь всегда будет открываться в одном направлении. Если флаг не установлен, то дверь открывается в направлении от игрока или NPC, который ее открывает.
- Reverse dir – если вас не устраивает направление, в котором открывается дверь при установленном флаге One Way, этот флаг позволяет его инвертировать (заменить на противоположное).
К любой двери можно привязывать статичные декорации, например, дверную ручку. Попробуем сделать это. Добавьте на карту декорацию DoorKnobDual1 (Decorations > Office > Door Knobs) и расположите ее в подходящем месте на двери. Вы заметите, что дверь слишком широка, чтобы войти между дверными ручками, так что уменьшите ее ширину (для этого выделите дверь, а потом снимите выделение с origin-браша, кликнув на него с нажатым Shift, так чтобы выделение останется только на браше двери).

Теперь нужно связать дверь и дверную ручку. Воспользуемся системой parent, которая работает не только с динамическими декорациями в игре, но и со статическими на этапе компиляции. Задайте двери имя door1 (key = targetname, value = door1), а дверной ручке – соответствующее имя parent (key = parent, value = door1). Компилируйте карту и убедитесь, что ручка движется вместе с дверью.
Точно так же можно создавать двери, являющиеся моделями целиком, без брашей. Правда, два браша всё равно понадобятся – это origin-браш и hitbox-браш, задающий геометрию для определения столкновений. Но они оба не видны в игре, видна будет только привязанная модель (одна или несколько). Именно так были сделаны двери с решетками на демо-уровне OIFD.

В следующих уроках мы углубим тему дверей: рассмотрим, как сделать автоматически открывающиеся двери (как в супермаркетах), а также рассмотрим технику оптимизации уровня с помощью Area Portals, комбинируемых с дверями.
Скачать исходник карты (map-файл) этого урока__________________