Продвинутая камера № 2: автонаводка
Это обучение позволит вам создавать «Живую» камеру.
Тоесть Сама камера будет следить за передвижением любого NPC, какого укажите.

В этом примере использованы башня от танка (func_tank) и его дуло (func_tankmortar).
Объясню как это всё работает:
Так как танк имеет возможность следить за его мишенью, при этом, вращая свою вышку и дуло на оппределённое количесто градусов, то эти обе части мы будем использовать, как ножку и голову камеры. Возможность вращения, делает камеру более функциональной.
Так же если учесть, что танком можно управлять, то и камерой следовательно тоже, но на этом уроке речь пойдёт не о контролировании камеры, а о её автоматизировании.
Делать камеру будем поочерёдно, тоесть сначало «скелет», потом «тело/обшивка/оболочка».
Начнём со скелета:
Делаем «ножку» камеры: Создаём Браш размерами 27 (высота) х 2(ширина и длина) и затекстуриваем её в текстуру NODRAW. Почему NODRAW? А чтобы небыло видно этой палки, так как на её месте будет модель.
Теперь эту палку превращаем в func_tank со следующими настройками:
Name: rotation_yaw
Yaw Rate: 35 // скорость кручения ножки нашей камеры.
Yaw Range: 360 // на сколько градусов ножка камеры может поворачиваться.
Barrel lenght: 14 // длина будущей «головы» камеры
Rotate Start Sound: npc/turret_wall/turret_start1.wav // звук при начале вращения
Rotate Loop Sound: npc/turret_wall/turret_loop1.wav // звук при самом вращении
Rotate Stop Sound: npc/turret_wall/turret_stop1.wav // звук при остановки вращения
Заплатка Flags:
Ставим галочку на Activate, чтобы «ножка» была сразу активирована. Тоесть её не придётся включать.
И ставим галочку на Only Direct, что позволит Ножке камеры следить за нами и не стрелять
Делаем «голову» камеры:
Нам понадобится браш размерами 14 (в длину) х 4 (ширина и высота) и опять же затекстуриваем текстурой NODRAW.
Превращаем браш в Энтити func_tankmortar и ставим следующие настройки:
Name: rotation_pitch
Parent: rotation_yaw // эта опция позволяет вращатся нашей будущей «голове» вместе с «ножкой»
Pith Rate: 20 // скорость движения
Pith range: 70 // наклон «головы» не сможет превысить 70 градусов
Barrel length: 14 // длина «головы»
Заплатка Flags:
Ставим галочку на Activate, чтобы «голова» была сразу активирована. Тоесть её не придётся включать.
И ставим галочку на Only Direct, что позволит Голове камеры следить за нами и не стрелять.
Расставьте объекты в следующем порядке:





И так наш «скелет» готов. Осталось добавить «тело» и «глаза» для полного счастья =)
Делаем «тело» :
Для «тела» мы будем использовать entity prop_dynamic. Почему Динамическую энтити используем? Потому что у неё есть важное для нас поле parent.
И так создаём prop_dynamic и в поле parent указываем rotation_yaw, для того чтобы скелет и тело двигались вместе.
Загружаем модель (world model) «models/props_wasteland/camera_arm001a.mdl». Теперь эту модель ставим внутри нашго скелета.
Теперь точно так же загружаем модель «головы» камеры, это «models/props_wasteland/camera_lens001a.mdl».
В поле parent указываем rotation_pitch, чтобы тело двигалось вместе со скелетом.
И теперь ставим её внутри нашего скелета.
У вас должно получится следующее:





Осталось добавить «глаза». Это будет камера point_camera.
Создаём камеру, называем её camera1 и в поле parent указываем rotation_pitch.
Ставим её в «голове». Вот так это выглядит всё:





Теперь когда у нас есть уже готовая камера, надо сделать монитор.
Для создания монитора нам надо создать браш любого размера и превратить в func_monitor, где в поле camera_name укозать имя нашей камеры camera1.
Чтобы наш монитор показывал картинку, надо сделать экран:
Берём инструмент Toggle Texture Application (shift+a) и на одну сторону монитора прилепляем текстуру с именем dev/dev_tvmonitor1a .
Ну казалось бы и всё. Но нет… Нам надо еще задействовать эту камеру и указать её «цель».
Создаём entity logic_auto. Эта энтити поможет нам запустить скрипт сразу же, как загрузится карта.
В поле Outputs выставляем следующее:
1) My output named: OnMapSpawn
Targets entities named: rotation_yaw
Via This Input: SetTargetsEntityName
With a parameter override of: !player // здесь может быть не только игрок, но и любой NPC. Просто поменяйте это значение на имя другого NPC
// При загрузке карты, «ножка» камеры будет всегда следить за игроком.
2) My output named: OnMapSpawn
Targets entities named: rotation_pitch
Via This Input: SetTargetsEntityName
With a parameter override of: !player // здесь может быть не только игрок, но и любой NPC. Просто поменяйте это значение на имя другого NPC
// При загрузке карты, «голова» камеры будет всегда следить за игроком.
Вот собственно и всё.
Скачать исходник тут.
Скачать готовую версию тут.
Автор: 5p1r17.
20 марта 2005, 18:06