Уважаемые посетители нашего форума! Сообщаем вам, что данный форум оставлен только в целях изучения материалов.
Все вопросы, обсуждения тем и новостей проводятся на новом форуме.
Ссылку на новый форум вы можете найти вверху страницы.
Пол: Мужчина Страна: Российская Федерация Город: Красноярск На сайте с: 23.05.2010
Группа: Администратор
Сообщений: 775
Награды
Статус: Offline
Разбор кнопок
- Selection tool (Shift+S). Самый главный инструмент. Ваша рука в Хаммере. Выделяет объекты.
- Magnify (Shift+G). Лупа.
- Camera (Shift+C). Камера.
- Entity tool (Shift+E). Создает объект.
- Brush tool (Shift+B). Создает браш.
- Toggle texture application (Shift+A). Накладывает разные текстуры на разные стороны браша.
- Apply current texture (нет гор. клавиш). Применяет определенную текстуру ко всему брашу.
- Apply decals (Shift+D). Накладывает декаль на браш. Это текстуры которые лежат в папке /decals/.
- Apply overlays (Shift+O). Накладывает оверлэи (текстуры), подобные декалям, но которые можно растягивать.
- Clipping tool (Shift+X). Режем браши.
- Vertex tool (Shift+V). Изменяет формы объектов, редактируя их вершины.
п.с. То, что в скобках, это сочетание горячих клавиш
- Показать/убрать сетку, показать/убрать сетку в 3D-виде.
- Масштаб сетки (уменьшить/увеличить).
- Загрузить/сохранить расположение окон (при использовании 1 окна редактирования).
- Отменить/возобновить произведённое действие.
- Функция Carve для вырезания отверстий в объектах.
- Группировать/разгруппировать объекты.
- Функция Ignore Groups предназначена для редактирования отдельных объектов из группы. При включенной данной кнопке, группа объектов как бы временно разгруппировывается, и Вы можете изменять отдельные объекты.
- Скрыть выбранные объекты; скрыть все, кроме выбранных объектов; показать все объекты.
- Вырезать/копировать/вставить объекты
- Включает/выключает «кордонный» режим, редактирование границ выделения. «Кордонный» режим используется для «вырезания» какой-либо части карты и последующей компиляции. Например, Вы создаете большую карту. В этом случае компиляция может длится довольно долго. Создаем «кордонное» выделение, ставим точку рождения игрока внутри выделенной части карты и компилируем только эту часть
- Включает/выключает выделение объектов только при нажатии по центру (по центральному крестику).
- Включает/выключает автоматическое выделение нескольких объектов. Если выключено то, для выделения нескольких объектов необходимо дополнительно нажать Enter.
- Закрепляет текстуры на объектах, при вращении или смещении объекта текстуры на нем не сдвигаются (обязательно включите эту опцию!).
- Способ выравнивания текстур (по стороне объекта или относительно координат). Особого значения не имеет, т.к. тип выравнивания можно в любое время поменять на панели работы с текстурами.
- Выключает показ "оставшихся" граней у дисплейстмент-объектов, при условии, что кнопка "Da" выключена.
- Поверхности окрашиваются в жёлтый цвет если угол этих поверхностей слишком крутой для того чтобы игрок мог по ним подняться.
- Показывает "оставшиеся" грани у дисплейстмент-объектов, при условии, что кнопка "Dd" выключена.
- Ппоказывает окно с параметрами компиляции карты. Здесь же компиляция и запускается.
- Включает/выключает различные отображаемые параметры моделей и энтитей, для разных режимов просмотра редактируемой области 2D или 3D.
Определение понятий, которые могут встретиться в туториалах
Вертекс(Vertex) - это вершина, которую в VHE можно перемещать только с помощью Vertex Tool, но при нарушении правильности форм полигонов появляется ошибка(Invalid solid structure). Браш(Brush) - это одна элементарная(простейшая) единица VHE, примитив, используемый для создания сложных объектов. (может быть квадратом, трубой, стеной или чем угодно) Фэйс - это одна из сторон браша. Энтити(Entity) - это то, что не является простым брашем, а взаемодействует с игроком в процессе игры. К примеру, вода, двери, стекла - все это энтити, так как эти объекты не просто существуют на карте как преграда, а еще и выполняют какую либо функцию. Parent(Родитель) - это параметр энтити. Если для первой энтити указать тут имя второй энтити, то после компиляции первая энтитя будет двигаться вместе со второй (но не наоборот). Причём будет всё движение выглядеть так, будто обе энтити являются одним целым. Использовать этот параметр надо только с динамическими энтитями(которые могут менять своё положение), в противном случае, могут возникнуть непредсказуемые ошибки. Полигон - это совокупность 3х вертексов(пространственный треугольник). Leak - это "дырка" в безконечность.
Пол: Мужчина Страна: Российская Федерация Город: Красноярск На сайте с: 23.05.2010
Группа: Администратор
Сообщений: 775
Награды
Статус: Offline
Ваша первая карта
Для того, чтобы создать карту, нужно сначала придумать ее. Нужно или начертить примерный план на бумажке или в каком-нибудь графическом редакторе(это не обязательно). Далее будет описан метод создания двух комнат, соедененных коридором(Г-образной формой)
В меню жмем File, а затем New
Выбираем в левой панели инструментов Block Tool (). Кликаем мышкой по любому 2D экрану (Напомню, что top(x/y) - это вид сверху, side(x/z) - это вид с боку, front(y/z) - это вид спереди.) и создаем куб. Для примера возьмем размеры комнаты такие: 256х512х512
Далее жмем правой клавишей на получившемся кубе и выбираем единственный возможный вариант "Create object". Мы создали первый элемент нашей карты. Такой примитив называется "брашем".
Для этого в хаммере есть встроенная утилита "Hollow". Выделяем наш "браш" и кликаем правой клавишей. В появившемся меню выбираем нужную нам утилиту. Появилось окошко с цифрами, где настраивается толщина стен в юнитах. Самое оптимальное значени для стен - 10 юнитов. Жмем ОК и получаем полноценную комнату.
Для того, чтобы выделить определенную "браш" есть кнопка "Ungroup selected groups" в верхней панели инструментов (первая = группировать выделенные объекты, вторая = разгруппировать объекты). Выделяем комнату (чтобы переключиться на курсор, который может выделять все что угодно в 3D и 2D окнах, вам нужно нажать на кнопку (). Теперь можете выделять спокойно любой из шести "брашей".
Выделяем четыре стенки и раскрашиваем как хотим, с помощью инструммента в левой панели "Toggle texture application" (). Подобным способом раскрашиваем потолок и пол.
Пример:
За это место отвечает объект info_player_start. Выбираем в левой панели инструментов кнопку "Entity tool" (). После нажатия на инструмент выберите нужный объект из списка в правой панели инструментов (info_player_start). Ставим его в нашу комнату так, чтобы ноги его не были ниже пола (если они будут ниже, то получите эффект "застревания" игрока на карте). Слишком высоко ставить тоже не нужно (ибо получится, что ваш игрок будет падать на пол).
Тем же инструментом, описаном выше, создадим объект "light". Поставим его под потолком. Наша комната будет освещена.
Добавим в нашу карту несколько моделей, например, стул или стол. За это у нас отвечает объект prop_physics. Ставим его в самое подходящее для вас место. Выделяем его и жмем правой клавишей и в появившемся меню выбираем "Properties" и пишем путь к моделе в параметре "World model", в появившемся окне свойств объекта.
Пример:
Для создания дверного проема, создаем еще один "браш"(проем будет таким размером, каким вы создадите данный "браш") Далее выделяем его и жмем в верхней панели на кнопку "Carve with selected objects". Таким образом, мы вырезали в стене проем размером с наш браш (кстати, не забудьте его удалить).
Создадим идентичную комнату. Выделяем нашу старую комнату (Зажмите клавишу CTRL и кликайте по брашам) (модели трогать не стоит) и, зажимая левый shift, тянем нашу комнату. Таким образом мы скопировали старую комнату. Теперь повернем ее на 90 градусов (кликаем два раза мышкой по центру новой комнаты до появления кружков и, зажав все тот же шифт, поворачиваем ее в нужную нам сторону вокруг своей оси.
Пример:
Теперь постараемся соединить эти два проема коридором в форме буквы "Г". Так как толщина стенок у нас была задана в 10 юнитов, давайте создадим следующие браши таким образом:
Создадим два "браша" на 10 юнетов больше. Это нужно для того, чтобы при применении утилиты Hollow не получалось несостыковок с проходами.
Удаляем стенки у этих коридоров для того, чтобы можно было пройти:
Находим кнопку "Clipping tool" и жмем ее. Этот инструмент служит для резки брашей. На кнопку можно нажать три раза, при этом будут меняться свойства обрезки (1 - обрезать слева, - обрезать справа, 3 - просто разрезать браши не удаляя ни левой, ни правой части). Выделяем один коридор (весь) и обрезаем следующим образом:
Жмем Enter и повторяем ту же операцию со вторым коридором.
Пол: Мужчина Страна: Российская Федерация Город: Красноярск На сайте с: 23.05.2010
Группа: Администратор
Сообщений: 775
Награды
Статус: Offline
Создание неровных поверхностей
Давайте создадим браш размером 256х256х256. Далее будем их копировать таким образом, чтобы у нас получилась своеобразная стенка. Перед выстроением стенки подумайте сразу в каких местах что у вас будет выпирать. И в зависимости от своих причудливых вкусов, выстраивайте стенку.
Для создания рельефа в Хаммере была встроена специальная программа "Displacement", которая как раз и воспроизводит рельеф должным образом. Чтобы туда попасть нужно сделать следущее: кликаем в левой панели на кнопку "Toggle texture application" () и в появившемся окне идем в закладку "Displacement".
Теперь зажав левый CTRL выделяем поверхности наших брашей, которые, по вашему мнению, вам понадобятся в игре для рельефа. Поверхность, которую вы не выделите, удалится. Далее жмем кнопку Create, тем самым, создаем на выделенных сторонах место для работы с рельефом.
(Если не хотите парится с рельефом, можете нажать кнопку "Subdivide". Она рандомно сделает ландшафт).
Но если хотите сделать все сами, то нажимаем кнопку "Paint Geometry". Появляется окошко, а при наведение в 3д-окне мышкой на редактируемую поверхность, курсор превращается в зеленый шар с желтой точкой в центре и радиусом, который указывает в каком направлении будет производиться сейчас вытягивание.
Наводим на нужную нам точку на плоскости и нажимаем или на правую, или на левую клавишу мышки(в зависимости в каком направлении нам нужно вытягивать рельеф по оси). Увеличив ползунок "Radius", вы увеличиваете радиус вашего поля действия, то есть теперь вы будете редактировать большую площадь.
Ползунок "Distance" отвечает за скорость вытягивания рельефа. Ну, рекомендую не ставить значение больше середины, а то и глазом не успеете моргнуть как ваш рельеф улетит в бесконечность. В поле "Axis" вы можете выбрать, в каком направлении будет рисоваться рельеф. Радио-поле "Effect" отвечает за эффекты рельефа. Мало нужная вещь. Оставьте первую опцию. Галочка "Spatial", там же, убирает сферу вокруг курсора и позволяет тем самым вытягивать только одну точку. Убрав ее, у вас появляется возможность выбрать разные кисти в поле "Brush". Два поля ("Soft-Edge" и "Hard-Edge"), отвечают за качество вытягивания, то есть параметр "Soft-Edge" смягчает, округляя как бы все, а "Hard-Edge" тупо вытягивает квадраты.
Левый Shift помогает заффиксировать курсор на нужной вам точке. После того как вы его зажали, ведите мышку вверх или вниз, параллельно зажав левую клавишу мышки. Параметр "Power" в главном окне изменяет размер треугольников (чем больше, тем они мельче). Кнопка "Paint Data" рисует какбы протертости на вашей текстуре. (Вообще, у каждой текстуры есть своя скрытая текстура, как-то логично связанная с ней. Например, у сена - это трова).
Cоздание реалистичного тумана
Чтобы куда-то поместить туман, нужно создать место под этот самый туман. Возьмем, к примеру, непольшую карту с лесом и деревьями
Создайте энтитю env_fog_controller и поместите ее в том месте, где считаете нужным. Именно эта энтитя и отвечает за прорисовку тумана на карте. Для того, чтобы туман работал, достаточно включить всего один параметр в ее настройках, а именно Fog Enable: Yes. Нажмите F9 и убедитесь в этом сами.
Фактически на этом можно остановится
1. Если вы хотите изменить цвет тумана, сделать его, скажем, красным. Выделите энтитю env_fog_controller, зайдите в ее настройки (Alt+Enter) и найдите там два параметра, которые отвечают за цвет тумана, а именно Primary Fog Color и Secondary Fog Color. Вот пример красного тумана
2. Если вы хотите сделать туман ближе по отношению к игроку. За это отвечают параметры Fog Start и Fog End. Например, установите такие значения: Fog Start: 200, Fog End: 400. Результат смотрим на скрине ниже:
3. Если вы хотите, чтобы туман оказался и на небе, то зайдите в Map > Map Properties и напротив параметра SkyBox Texture Name напишите sky_day02_10. Тем самым вы примените текстуру неба, которая лучше всего смотрится на фоне того тумана, который мы хотим создать. Главное чтобы на вашей карте было создано небо. Чтобы текстура неба и цвет тумана слились, зайдите в настройки энтити env_fog_controller и в параметрах Primary Fog Color и Secondary Fog Color поставьте такие значения: Primary Fog Color: 176 192 202 Secondary Fog Color: 206 216 222 Результат виден на скриншоте ниже:
4. Если хотите, чтобы над землей была туманная дымка, то создайте прямоугольный браш произвольной формы, залейте его текстурой trigger и переведите в энтитю (Ctrl+T) func_smokevolume. Настройка [b]func_smokevolume: Particle Color1 (R G и Particle Color2 (R G B) - цвет частиц. Material - текстура для дымки или облаков, называйте как вам удобней. Particle Draw Width (units) - размер частиц в единицах/дюймах. Particle Spacing Distance (units) - расстояние между частицами. Чем ниже число, тем плотнее частицы и на оборот. Density Ramp Speed (seconds) - время движения от нулевой плотности в плотность 1, в секундах. Rotation Speed (degrees/sec) - скорость вращения частиц в градусах, через секунду. Movement Speed (units/sec) - скорость перемещения частиц по кругу, в единицах/дюймах в секунду. Density [0.. 1] - плотность частиц, от 0 до 1.
Конечный вариант тумана со всеми вышеописанными функциями можно увидеть ниже:
Cоздание вертикальных лестниц
Поместите на карту поинт-энтитю prop_static (служит для вставления в карту неподвижных моделей). Нажмите Alt+Enter для открытия ее свойств И установите следующий параметр: World model - models/props_c17/metalladder001.mdl. Нажмите "Apply" и закройте это окно. Теперь настройте модель в пространстве, двигая/вращая ее до тех пор, пока не получите нужный вам результат.
Поместите на карту новую поинт-энтитю, название ей будет "func_useableladder" (используемая лестница). Откройте свойства этой энтити и настройте: Name (имя этой энтити, позволяющее другим энтитям обращаться к этой) – ladder01a[в имени энтити учитывается регистр]. Cохраните все параметры и закройте окошко.
Теперь поместите энтитю, так, чтобы она находилась перед лестницей, не залазив в неё, и «стояла» на земле. Примерно так, как показано на картинке:
Дальше в центре этой энтити есть небольшой кружок. Подтяните мышку к нему, зажмите левую кнопку мыши и перетащите новый образ этой энтити вверх, так, как будто полученный прямоугольник стоит на лестнице.
Всё на этом сама лестница, готова.
Создайте новую поинт-энтитю info_ladder_dismount (служит для определения зон «используемости» лестницы). Откройте параметры этой энтити и отредактируйте параметр: LadderName[b/] (имя лестницы - объекта) – [b]ladder01a и закройте свойства. Поместите энтитю рядом с func_useableladder (не обязательно в притык).
Теперь выделите info_ladder_dismount, зажмите Shift + (Лев. клавиша мыши), перетащите эту энтитю на правую сторону энтити func_useableladder и отпустите сначала Shift, а потом клавишу мышки. Тем самым вы клонировали (дублировали) эту энтитю. Расположите ещё несколько info_ladder_dismount в тех местах, откуда можно будет использовать вашу лестницу.
Наилучший вариант такой:
Теперь можете приступать к компиляции После загрузки скомпилированной карты с вашей лестницей, просто подойдите к ней с любой стороны и нажмите клавишу использования. Повторным нажатием «использовать» или нажатием клавиши прыжка, вы упадёте с лестницы.
Горизонтальные лестницы - это паралельно раставленные набор брашей
Создайте браш размером 128х12х8. Далее правой кнопкой кликните на браш и выберите Copy. Теперь порешайте этот браш, он вам больше не пригодится.
Теперь на пустой области экрана снова кликните правой кнопкой мыши и выберите Paste Special, вылезет вот такое окошко:
Это окошко применяется для спецефических операций вставления. Таких как вставление со сдвигом и вставление с вращением. Number of copies to paste – колличество вставляемых объектов Start at centeter of original – все объекты вставятся в центре оригинала, или в центре бывшего оригинала Group Copies – сгрупировать копии Offset – сдвиг по осям Rotation – вращение по осям
О сдвиге: X сдвиг вправо(положит.)/влево(отрицат.) относительно вида top(x/y). Y свдиг вверх(положит.)/вниз(отрицат.) относительно вида top(x/y). Z cдвиг вверх(положит.)/вниз(отрицат.) относительно окна front(y/z).
Итак, ширина одной секции лестницы = 12 юнитов, длина = 128, а высота = 8. Если вам нужно лестницу, например, выстой 64 юнита, то просто разделите это число на высоту одной секции. А полученное число запешите в поле Number of copies to paste. Сдвиг расчитывайте тоже из начальных параметров размера одной секции.
Пример данных с высотой лестницы в 64 юнита: Number of copies to paste = 8 X = 0 Y = 12 Z = 8 Жмем ОК и получаем следующее:
Теперь небольшие штрихи. С помощью Clipping Tool отрезаем нижние углы и "сажаем" лестницу на треугольный браш.
Пол: Мужчина Страна: Российская Федерация Город: Красноярск На сайте с: 23.05.2010
Группа: Администратор
Сообщений: 775
Награды
Статус: Offline
Создание продвинутого стекла
Под фразой "продвинутое стекло" можно понимать то стекло, которое при стрельбе не разбивается полностью. От продвинутого стекла отлетают маленькие кусочки... Пример:
Берём браш(толщину советую сделать поменьше), и превращаем его в Энтити(Entity) func_breakable_surf. Эта энтити(Entity) представляет собой "бьющиеся покрытие" (в нашем случае - это стекло), и эта энтити должна быть обязательно покрыта текстурой NODRAW, за исключением одной стороны браша, при этом материал текстуры должен быть обязательно "бьющийся" (у нас - стекло). То есть, одна сторона браша покрыта материалом стекла, а другие текстурой Nodraw.
Важно: Сторона, которую будете закрашивать текстурой, должна быть обязательно 4-х сторонняя. То есть никаких треугольных или в форме трапеции сторон. Что обычно бывает после использования функции "Carve".
п.с. "бьющиеся покрытие" - это текстуры, содержащие в имени слово break или breakable.
Вот пример всего этого: |
Скачать исходник можно здесь. Скачать готовую версию можно здесь.
Создание пружинющей доски
Для того, чтобы сделать пружинющую доску, нам нужно сделать своеобразный пьедестал, к которому и будет крепиться наша доска В нашем примере будет пьедестал (небольшое возвышение) с простой брашевой лестницей. Ширина пьедестала = 112 юнитов, высота = 160 юнитов.
Пример: ...
Доску создадим из браша размерами: длина = 168 юнитов, ширина = 32 юнита, толщина = 2 юнита. Окрасим ее wood/woodshelf001a и отправим доску в ентитю func_physbox со свойствами: Name - dsk Material Type - Wood Далее позиционируем доску на уровне края трамплина.
Пример:
1. Создадим две точечные ентити phys_hinge и расположим их подобным образом:
2. У обоих phys_hinge в свойстве Entity 1 укажем нашу доску(dsk).
3. В левом phys_hinge(вид сверху top(x/y) настраиваем Hinge Axis так: если вы не видите в 2D окне маленького шарика для управления, с помощью которого нужно установить Axis, значит не нажата кнопка в Hammer "Toggle helpers" на панели инструментов.
Установить Axis надо именно так, как показано на рисунках для первой и второй ентити phys_hinge:
4. Выделяем доску и ентити phys_hinge, придвигаем к пьедесталу так, чтобы доска была вплотную к нему. Пример:
На этом все. теперь вы можете наслаждаться пружинящей доской, которая будет прогибается под вашим весом.
Прежде чем создавать арку вы должны ясно усвоить, какой формы вам нужна арка. Вот несколько рисунков для примера арок: Обратите внимание, что круг тоже относится к аркам.
Теперь вам необходимо сделать замеры и прибавить к ним 16 юнитов.
Пример: В данном примере будет обсуждаться арка размером 64х64 юнита с уклоном в 90 градусов.
Вам наверно интересно, почему мы прибавили к размерам 16 юнитов? Прибавлять можно и больше, и меньше. Это все зависит от того, какая арка вам нужна. В данном примере рассматривается арка с прямым углом, поэтому берем 16 юнитов. Все посторения с арками должны производиться только на виде top, иначе рузультат вас не устроит, ибо арка лицевой частью строиться вверх.
Примечание: Если вы не угадали с размерами, то удалите неправельную арку и постройте заново. И так делайте пока не получите нужную для вас арку.
На панели справа найдите такое окошко и выберите арку, как показано на рисунке:
Теперь выберите инструмент Block Tool (shift+b), выделите на виде сверху прямоугольник нужного вам размера с учётом 16-ти юнитов, нажмите правой кнопкой мыши на прямоугольнике и выберите Create Object.
Появится примерно слудуюещее окошко:
Описание данного окошка: Слева показан образ будующей арки. Wall width – это толщина арки (в нашем случае 16). Number of Slides – это колличество сегментов. Чем больше, тем сглаженнее будет арка. Arc – это угол арки, если нажать на кнопку Circle (окружность), то это приведёт к тому что ваша арка стнет окружностью а вполе Arc появится запись - 360, в таком режиме я и советую вам работать (по крайней мере мне так удобней). Но это не обязательно. И учтите что изза разных углов в поле Arc изменяются расчётные значения каркасной коробки, которую вы создали ранее… Start Angle – начальный угол, если ваша арка начинается не с 0 градусов. Add Height – добавить длину. Создаёт эффект пружины или винтовой лестницы, чем больше значение тем растянутей получится арка. Preview – генерирует превью вашей арки, то есть вариант того как будет выглядеть ваша арка. Введена для большего удобства.
Настройте в данном окне все так, как вам хочется. А в данном примере будут такие настройки: Wall width = 16 Number of Slides = 32 Arc = 360 Start Angle = 0 Add Height = 0
При таких настройках должно выйти следущее:
Включаем режим игнорирования групп(изначально арка сгруппирована) и выделяем ненужные нам места, затем удаляем их. Теперь с помощью Vertex tool придаем арке нужную форму.
Пол: Мужчина Страна: Российская Федерация Город: Красноярск На сайте с: 23.05.2010
Группа: Администратор
Сообщений: 775
Награды
Статус: Offline
Создание обычной продвинутой камеры
C помощью этой статьи вы научитесь делать камеру и монитор, отображающий определённую область, куда направлена эта камера.
Создаём Энтити point_camera, указываем ей куда смотреть, вращая её (для вращения объекта нажмите ctrl+m и укажите, по какой оси вращать обьект и на сколько, или просто в 2-д экране кликните два раза по центру объекта, пока не покажутся четыре кружка по углам объекта, а потом вращайте). Теперь задаём ей имя(параметр name) camera.
Для создания монитора делаем браш размером, например, 42х36х4 (42 в ширину, 36 в длину и 4 в толщину). После этого нам надо указать где у созданного браша будет Экран. Для этого нажимаем Shift+A. У нас вылезло окошко с заголовком Face Edit Sheet. Выделяем сторону браша(выделенная часть подсвечивается красным цветом) и присваиваем ей текстуру dev/dev_tvmonitor1a. Расширяем текстуру по всей выделенной части с помощью Fit(находится в окне Face Edit Sheet в поле Justify). Теперь, когда у нас есть экран, пора бы сделать и монитор. Превращаем наш браш в Энтити. Для этого выбираем браш, который надо превратить в Энтити, в 2Д виде жмём на нём правой кнопкой и выбираем Tie to Entity. Теперь выбираем класс func_monitor и высставляем ему следующие значения: Camera name: camera (имя нашей камеры, чьё изображение будет выводиться на мониторы)
Теперь нам осталось поставить Энтити info_player_start и какой-нибудь предмет перед камерой, чтобы удостовериться, что камера работает. Например, бочку.
И вот что, в конце концов получилось:
Скачать исходник можно здесь. Скачать откомпилированный вариант можно здесь.
Создание продвинутой камеры с автонаводкой
В этом туториале вы научитесь создавать ЖИВУЮ камеру, которая будет следить за передвижением любого NPC(какого укажите). Также нам нужно будет создать монитор, который будет показывать все то, что наша камера будет снимать.
В данном примере будут использованы башня от танка(func_tank) и его дуло(func_tankmortar). Использовать это мы будем потому, что танк имеет возможность следить за любой мишенью, поэтому, вращая свою вышку и дуло на оппределённое количесто градусов, эти обе части мы будем использовать как ножку и голову камеры.
Делать данную камеру будем поочерёдно, то есть сначало "скелет", а затем уже "тело/обшивка/оболочка".
Сначала будем делать "ножку" камеры. Для этого создаём браш (размеры браша: высота = 27, ширина = 2, длина = 2) и затекстуриваем её в текстуру 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, высота = 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 [/b]prop_dynamic[/b]. После создания, в поле 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, где в поле [/i]camera_name[/i] укозать имя нашей камеры 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. (При загрузке карты, "голова" камеры будет всегда следить за игроком))
Скачать исходник можноздесь. Скачать готовую версию можноздесь.
Пол: Мужчина Страна: Российская Федерация Город: Красноярск На сайте с: 23.05.2010
Группа: Администратор
Сообщений: 775
Награды
Статус: Offline
Создание физических дверей
Создаём новый браш с произвольными размерами(он будет дверью), делаем его энтитей func_physbox. Настраиваем его так: Name - phys_door Заходим во флажки и ставим галочку напротив: Only Break on Trigger (чтобы в результате ваших экспериментов, дверь вдруг не сломалась)
Далее создаём POINT entity - phys_motor, настраиваем следующим образом: Attachet Object (прикреплённый объект) - phys_door Во флажках убираем галку напротив: Start On - (для того чтобы это была дверь, а не лопасть винта)
Размещаем маленький шарик в центре энтити так, чтобы он имитировал ось, вокруг которой будет вращаться объект. Вот так:
Примечание: Примечание 1:phys_motor служит для создания моторов, вы видели на стандартных картах, ловушки которые рубят зомби пополам? Так вот этой энтитей всё и делается. Прикреплённый объект будет вращаться только по 1-ой оси, с 2-мя креплениями(ака петлями). Примечание 2: Изначально ось вращения задаётся как ”Y”. Вы можете поменять это, вращая энтитю.
Заменяем наш phys_motor на phys_ballsocket и настраиваем его так: Attachment 1 - phys_door Во флажках, то, что было с галочкой, оставляем без галочки, а то, что было без галочки, оставляем с галочкой
Располагаем наше крепление так, чтобы его центр являлся осью вращения в том месте, где, по вашему мнению, будет первая дверная петля Дублируем наше крепление и располагаем там, где, по вашему мнению, будет вторая петля. Должно получиться что-то типо этого:
Примечание: Примечание 1:phys_ballsocket позволяет прикрепить объект к 1-ой точке. И независимо от настроек он будет болтаться только вокруг неё, до тех пор, пока его не разобьет какой-нибудь output с параметром Break. Примечание 2: С помощью данной энтити делаются занавески и отваливающиеся вывески. ВНИМАНИЕ! НЕ БОЛТАЮЩИЕСЯ ВЫВЕСКИ. В общем не вникайте. Читайте дальше.
Создание болтающихся моделей
В данном туториале вы научитесь делать подвешанные модели(вывески, лампы, трупов и так далее). В туторе ниже будет описано, как подвесить трупа, со всеми физическими законами.
Создаём на карте поинт энтитю move_rope(служит для создания верёвок, проводов и прочего) и настраиваем следующим образом: Name - sign_rope_start_01 Next KeyFrame - sign_rope_end_01 Флаги не трогаем
Дальше создаем keyframe_rope(для соединения проводов), расположим его ниже нашего move_rope и настраиваем следующим образом: Name - sign_rope_end_01 Parent - sign
Итак, один провод готов. Теперь дублируем (перемещаем зажав shift) эти две энтити. И в именах «01» меняем на «02». У вас должны получиться энтити с именами: 1) sign_rope_start_02; 2) sign_rope_end_02. У вас должны получиться 2-е параллельные верёвки.
Как говорилось выше, мы будем использовать в качестве болтающегося предмета труп, а именно модель combine_soldier’a
Создаём энтитю prop_ragdoll(тряпичная кукла) и настраиваем следующим образом: Name - sign World Model - models/Combine_Soldier.mdl Для удобства входим во вкладку Model, устанавливаем Sequence: RagDoll и жмём apPly.
Теперь располагаем его так, чтобы он как бы висел на верёвках или просто был между ними. От положения keyframe_rope, зависит, как верёвки будут соприкасаться с трупом.
Создаём поинт энтитю phys_pulleyconstraint(см. примечание) и настраиваем ее так: Attachment 1 - sign_rope_start_01 Attachment 2 - sign Во флажках уберите везде галочки и поставьте только на No Collision until break.
Расположите эту энтитю внутри move_rope с именем sign_rope_start_01. Далее создаем phys_ballsocket с такими настройками: Attachment 1 - sign_rope_start_01 Attachment 2 - sign Play sound on break - debris/bustmetal1.wav
Расположите эту энтитю внутри move_rope с именем sign_rope_start_02.
На этом все.
Примечание 1:phys_pulleyconstraint используется для закрепления физических объектов с учётом центра тяжести объекта. То есть помимо того, что объект будет вращаться вокруг phys_pulleyconstraint, он ещё и будет вращаться вокруг своего центра тяжести. Поэтому если хотите получить нужный эффект при реальных вывесках, а не трупах, то сместите центр тяжести объекта в то место куда будет крепиться верёвка. Внимание: Используйте phys_pulleyconstraint только с верёвками, заполняйте оба поля Attachment, иначе карта при загрузке будет вылетать.
Примечание 2: Если вы хотите, чтобы ваша тряпичная кукла не представляла никакого препятствия для игрока (а такое желание появится), то просто во вкладке Flags поставьте галочку напротив Debris.
Создание катапульты
1. В данном туторе будет важно в каком окне что вы создаёте, внимательно смотрите на скриншоты и всё повторяйте. 2. Для понятного обьяснения будет введено такое понятие как "Щелчок". При поворотах объекта с зажатым shift’ом, «щелчок» равен 15-ти градусам.
Создадим нечто вроде ложки. Сделайте заготовку, как показано на скриншоте: Так же делать необязательно. Главное – расположить так, как показано на скриншоте.
Теперь делаем нашу ложку func_physbox и даём ей имя catapult_magazine. Во флажках ставим галочку напротив Only Break on Trigger, а другие параметры не трогаем. Теперь создаём phys_motor. Настраиваем: Name - catapult_fire Rotation Speed– 35000 (скорость вращения(в данном случае сила)) Spin up time- 0 (время для разгона(нам оно не пригодится)) Attachet Object - catapult_magazine
Во флажках уберите галочку со Start On
Правильно располагаем центр phys_motor. Например:
Теперь выделите всё и поверните на 6 «щелчков» так, как показано на рисунке ниже: Далее нажмите ctrl+b на клавиатуре, чтобы выровнять всё по сетке.
Теперь создайте кнопку и настройте ее следующим образом: delay before reset - 0. Переходим во вкладку Flags и ставим галочку на: Don’t moves(чтобы кнопка не двигалась). Use Activates. Переходим во вкладку Outputs, создаём новый Output и настраиваем: My output named - OnPressed, Targets entities named - catapult_fire, Via this input - TurnOn.
Создаём новый Output и настраиваем: My output named - OnPressed Targets entities named - catapult_fire Via this input - TurnOff After a delay in seconds – 0.5
п.с. После компиляции, ваша катапульта не будет работать, поэтому вы должны самим настроить всё правильно. Вам нужно будет вращать то phys_motor (но не в коем случае не перемещайте центр), то нашу ложку. Пример получившегося:
Создаём вот что: Теперь даём этой фишке функцию momentary_rot_button(постепенно вращающаяся кнопка), перемещаем центр прицела туда, где будет ось вращения и настраиваем: Name - catapult_aim Start Position - 0.5 (когда энтитя появится на карте, то на какой градус она будет повёрнута, относительно поля Distance) Start directon – Backward (стартовое направление) Speed 25 (скорость вращения, чем меньше, тем медленнее)
Во флажках убираем галочку с Not Solid(чтобы ложка не пролетала сквозь наше прицельное приспособление) и если вы сделали как показано выше, то ставим галочку на Y Axis(определяет ось вращения). Если вдруг ложка всё равно будет пролетать сквозь прицел или наоборот бить слишком слабо, то найдите компромисс между мощностью и толщиной прицела. Можно ещё поменять задержку перед отключением нашей ложки.
Теперь создайте себе цель и заряды в виде prop_dynamic или func_physbox. Но учтите, что если ваш объект для запуска очень тяжёлый, то, во-первых, вы не можете его поднять, во-вторых, сила катапульты должна быть больше, а задержка перед отключением – меньше.
После косметического ремонта катапульта должна выглядеть примерно так:
Пол: Мужчина Страна: Российская Федерация Город: Красноярск На сайте с: 23.05.2010
Группа: Администратор
Сообщений: 775
Награды
Статус: Offline
Создание иллюзии бесконечного движения
В данном туториале будет описаны действия, при которых вы сможете сделать бесконечный каньен
Этот тутор показывает вам принцип действия иллюзии бесконечного движения.
Дорогу нашу, а точнее каньон, мы будем делать из таких вот кусочков:
Создайте такой кусочек и отправте его в func_tracktrain. В параметрах ставте: first stop target: train1_wp1 Initial speed: 300 Max speed: 300
Теперь скопируйте несколько раз ваш кусочек и соедините все кусочки в одну дорогу (чем больше кусочков, тем длиннее дорога).
Например:
Далее нужно у всех func_tracktrain поменять параметр first stop target (например, если у первого мы указали "train1_wp1", то у второго надо "train2_wp1", а у третьего "train3_wp1" и т.д), это нужно для того, чтобы наши кусочки дороги стартовали каждый со своей точки.
Закончив возню с first stop target, принимайтесь за сами path_track'и. Создайте один path_track и назовите его train_wp1 (аналогично параметру first stop target у func_tracktrain), скопируйте path_track и получившиеся сстартовые точки расставте над func_tarctrain'ами, как показано на рисунку ниже (не забудте указать им имена схожие с параметром first stop target у func_tracktrain, чтобы у каждого func_tracktrain была своя стартовая точка).
Теперь создадим основную дорожку, по которой будут ездить все func_train. Для этого создайте два path_track, первый поставте в начале дороги над первым func_tracktrain, дайте ему имя wp2 и укажите nexn stop target: wp1, а другой в конце дороги (немного дальше от последнего func_tracktrain), дайте ему имя wp1, и укажите next stop target: wp2 . Нам надо чтобы кусочки, доехав до wp1, моментально телепортировались на wp2, для этого во флагах wp1, укажите teleport. Теперь расположите эти wp1 и wp2, как показано на скриншоте.
В параметре next stop target остальных path_track'ов укажите wp1, чтобы при активации func_train'ы двигались к wp1. Все, осталось только сделать платформу на которой будет стоять info_player_start.
1) Используйте туман для того, чтобы скрыть концы дороги, и env_shake, чтобы добавить тряску.
2) Обязательно ставте на земле trigger_hurt для того, чтобы игрок падая с поезда умирал, и не увидел того безобразия, что творится на конце дороги
3) Если немного пофантозироапть, то можно сделать всякие тонели, мостики через коньон, да встречающиеся на пути поезда. Для этого создайте нужный вам объект и отправте его в func_train, сделайте ему дорожеу из двух path_track и заставте активироваться в определенный момент. А столбы можно прикреплять к уже имеющимся кусочкам дороги (func_tracktrain'ам), при помощи пораметра parent