Из данной статьи Вы узнаете как можно создать разбиваемую камеру, которая становится
неработоспособной после ее уничтожения игроком. Для реализации данной идеи нам понадобятся
следующие
энтити-объекты:
Статья довольно сложная, по крайней мере, новичку будет непросто. Поверьте написать ее было тоже
не
так-то просто :) Если мы Вас еще не испугали, то можем начинать. Сейчас мы изготовим довольно
эффектную фичу.
Главное, что Вы должны понять после прочтения статьи, что объекты в Half-Life не являются
какими-то
определенными предметами, например, объект
func_door необязательно должен быть
именно
дверью. Необходимо понять, что объекты просто имеют определенные свойства, которые мы
можем
использовать для достижения различных целей.
Что будем делать:
Создадим где-нибудь на карте
монитор (это будет объект
func_button, т.е. обычная
кнопка), нажав на который, игрок увидит изображение с
камеры (объекта
trigger_camera).
Так как сама камера (
trigger_camera) является точечным объектом, то в игре она будет
невидимой. Нам же необходимо сделать разбиваемую камеру, т.е. видимый объект, поэтому рядом с
настоящей, но невидимой камерой мы создадим объект
func_breakable, который будет, так
сказать, олицетворять нашу камеру (материализировать).
Игрок думает, что видимая камера (
func_breakable) — это и есть камера, при помощи которой
он
видит изображение, хотя естественно функцию камеры выполняет расположенный рядом объект
trigger_camera.
Когда игрок разобъет видимую камеру (
func_breakable), необходимо прекратить работу
невидимой
камеры (
trigger_camera). Мы это сделаем переводом цели кнопки-монитора с камеры
trigger_camera на какой-нибудь другой объект. Больше при нажатии на монитор изображение
выводиться не будет, т.к. монитор уже не активирует камеру. Данную функцию можно реализовать при
помощи точечного энтити-объекта
trigger_changetarget, который может поменять парматр
"Target"
любому объекту.
Ну, и последнее. Необходимо, чтобы в начале каждого раунда функции кнопки-монитора
восстанавливались, т.е. кнопка опять была бы "направлена" на объект
trigger_camera и
активировала бы его. Это опять же реализуется при помощи объекта
trigger_changetarget,
только
теперь мы вернем монитору изначальное значение параметра "Target".
Схема работы разбиваемой
камеры
Чтобы Вам было немного полегче все это понять, мы составили схему работы разбиваемой камеры (см.
рис. ниже). В схему входят 7 энтити-объектов. Сейчас мы попытаемся еще раз повторить сказанное
выше,
но уже с использованием схемы.
Итак, главным на этой схеме является игрок. Его мы изобразили оранжевым кругом.

Рассмотрим
среднюю линию схемы, состоящую из 3-х энтити-объектов (
func_button,
trigger_camera,
info_target).
- Игрок подходит к стене и нажимает на кнопку-монитор (func_button);
- Кнопка-монитор активирует камеру (trigger_camera);
- Камера показывает игроку какой-то участок карты. "Взгляд" камеры направлен в сторону
объекта
info_target
Теперь рассмотрим
верхнюю линию схемы с двумя объектами (
func_breakable и
trigger_changetarget).
- Игрок разбивает предмет, изображающий камеру, т.е. func_breakable;
- Func_breakable активирует объект trigger_changetarget, который "переводит"
кнопку-монитор с
trigger_camera на func_door (синяя стрелка уходит вниз-вправо)
Т.к. кнопка больше не активирует камеру, то игрок, нажимая на нее, ничего не видит (камера
разбита).
Теперь при нажатии на кнопку будет открываться невидимая дверь, но это нам и нужно и совершенно
никак не мешает.
Нижняя линия схемы (объекты
func_door и
trigger_changetarget).
Как мы уже говорили, из статьи Вы должны понять, что объекты можно использовать не по
назначению. В
данном случае мы используем дверь не по своему прямому назначению. Наша дверь не будет стоять в
каком-то проеме, мало того она будет полностью прозрачной, через нее можно будет проходить
(двери
как бы и нет), и она будет выполнять функцию триггера (активировать объект).
В свойствах двери мы выставим следующий параметр
delay before close: -1, таким образом
дверь
будет открываться один раз за раунд. Дальше мы воспользуемся тем, что любая открытая дверь в
начале
следующего раунда автоматически закрывается.
При закрытии (т.е. в самом начале каждого раунда) дверь будет активировать еще один (второй)
объект
trigger_changetarget, который обратно "переведет" кнопку-монитор на камеру
(
trigger_camera), и игрок вновь, если захочет, сможет увидеть изображение с камеры.
/* Если до сих пор Вам все понятно — наши поздравления! Вы сделали очень
большой шаг на пути к профессиональному мапперству! Понять все это сразу сможет не любой
новичек. Но зато когда он поймет, то почувствует, как у него развязываюся руки и он может
крутить-вертеть свойствами объектов как хочет, добиваясь требуемой цели. */
Дальше мы приводим свойства всех используемых объектов.
1. Кнопка-монитор, висящая на стене. При активации ее игроком, она активирует камеру
trigger_camera.
Name: monitor_button
Targetted object: camera1 (изначально кнопка активирует камеру)
Delay before reset: 0 (кнопку можно нажимать как угодно часто, без задержек)
Delay before trigger: 0 (кнопка активирует камеру мгновенно, без задержки)
Флаги:
Don't move: кнопка-монитор не вдавливается в стену при нажатии (так удобнее и
реалистичнее)
2. Камера (trigger_camera). Камера направлена на объект info_target и передает
изображение
игроку.
Name: camera1
Target: target1
Hold time: 10 (время, в течении которого камера передает изображение)
3. Визуальная часть камеры (объект func_breakable). Разбивая func_breakable (см. рис.
выше),
мы переключаем кнопку-монитор с камеры на скрытую дверь, выполняющую функцию триггера.
Target on break: change_door (имя первого объекта trigger_changetarget)
Strength: 75 (прочность камеры, порядка 3 выстрелов из винтовки)
Material type: metal (тип материала, в данном случае металл)
4. Мишень для камеры (объект info_target). В сторону этого объекта будет направлен
"взгляд"
камеры.
Name: target1
5. Объекты, управляющие кнопкой-монитором (trigger_changetarget). Эти объекты
"перенаправляют" кнопку-монитор с камеры на скрытую дверь (когда игрок разбивает камеру) и
наоборот
с двери на камеру в начале каждого раунда.
5.1 Первый trigger_changetarget. Переводит кнопку с камеры на дверь.
Name: change_door
Target: monitor_button (здесь мы указываем имя кнопки-монитора, т.к. именно ей мы меняем
параметр Target)
New target: secret_door (сюда вписываем название новой цели для кнопки-монитора)
5.2 Второй trigger_changetarget. Переводит кнопку с двери обратно на камеру в начале
каждого
раунда.
Name: change_camera
Target: monitor_button (здесь мы указываем имя кнопки-монитора, т.к. именно ей мы меняем
параметр Target)
New target: camera1 (сюда вписываем название изначальной цели для
кнопки-монитора)
6. Секретная дверь (func_door). Невидимая дверь является у нас объектом, на который
переводится действие кнопки-монитора, после разрушения камеры, а также дверь при своем закрытии
в
начале каждого раунда, активирует второй trigger_changetarget.
Размеры, раположение и текстура для закрашивания не важны! Дверь в данном случае не является
собственно дверью.
Name: secret_door
Render mode: texture (этот режим совместно со следующим fx amount: 0 делает дверь
абсолютно
прозрачной)
FX Amount: 0 (этот режим совместно с предыдущим делает дверь абсолютно прозрачной
независимо
от текстуры на двери)
Delay before close: -1 (необходимо, чтобы дверь не закрывалась до начала следующего
раунда,
когда она автоматически закроется и активирует второй trigger_changetarget)
Fire on Close: change_camera (данный объект trigger_changetarget будет активирован при
закрытии двери, в нашем случае в начале каждого раунда)
Флаги:
Passable: необходимо отметить, чтобы игроки не сталкивались с прозрачной дверью.
--
Ну, чтож, вот и все. Очень надеемся, что Вы разберетесь со всей этой хитрой системой, т.к.
материал
этой статьи дает базовый набор знаний, открывающих дорогу в мир профессионального
маппинга.
Ну, и прежде, чем Вы перейдете к изучению дальнейшего материала, хочется сказать еще несколько
слов.
Подобная камера была реализована на карте
DE_ASCHE. Тогда было использовано 10 объектов.
Отличие заключалось в том, что дверь не использовалась, как триггер. Вместо этого было два
объекта
trigger_multiple, размещенных на базах обеих команд. Задачей этих триггеров была
активация,
кстати посредством еще одной (второй уже) скрытой двери, объекта
trigger_changetarget.
Как видите, та же самая идея сегодня реализована уже без
trigger_multiple с помощью уже
всего
7 объектов вместо десяти. Не исключено, что есть и еще более простое решение, надо лишь немного
подумать, вспомнить какие еще есть объекты и попробовать использовать их свойства более
эффективно.
Здесь, как и в программировании, есть множество вариантов решения одной и той же задачи.
breakable_camera.zip [40Кб] — в
архиве
карта-пример в форматах BSP и RMF.