Это обучение позволит вам создавать "Живую" камеру. Тоесть Сама камера будет следить за передвижением любого 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 // При загрузке карты, "голова" камеры будет всегда следить за игроком. Вот собственно и всё.
Источник: http://www.source-inside.ru/index.php?id=98 |