Приветствую Вас 1-класс | RSS Главная | Каталог статей | Регистрация | Вход
Меню сайта

Категории раздела
Программирование [7]
Моделирование [8]
Маппинг [67]
Текстурирование [10]

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Мини чат

Главная » Статьи » Маппинг

Продвинутый унитаз
Продвинутый унитаз
Итак, надеюсь основы маппинга вы знаете, и мне не придётся объяснять что такое точечная энтити и прочее. В этом туториале я расскажу вам как пользоваться системой I/O(Input Output system)на довольно наглядном примере. Будем делать "продвинутый" унитаз. Вы все наверное видели вот этот унитаз на dm_lockdown'e? 



Согласитесь, как-то не очень эффектно он вырывается из стенки, откровенно говоря он никак и не вырывается, а просто берётся... Так давай-те же поможем ему как следует отодраться от стены, с разрушениями, с треском, с пылью wacko

1) Для начала давайте создадим стенку для сартира с перегоротками, чтобы другие не пасли, когда вы делаете своё важное "дело" гыгы %).

2) Теперь создаём сам сартир при помощи точечной энтити prop_physics и изменим следующие параметры в свойствах(выберите объект в 3D view и нажмите ALT + ENTER):
"Name"="любое_имя"(я назвал "toilet1")
"World Model"="models/props_wasteland/prison_toilet01.mdl"
"Disable shadows"="yes"
Зайдём в закладку "Flags" и поставим галки напротив "Motion disabled" и "Enable motion on Physcannon grab"

3) Сейчас включите немного фантазии и представьте как бы выглядела стена после того как от неё был оторван Gravity gun'ом унитаз? Правильно, там бы образовалась дырень. Вот её давайте и сделаем. Объяснять как делать дырки думаю не надо, но добавлю что при создании дыры я использовал такие инструменты как: Clipping tool, Vertex tool и Displacement

4) Необходимо дыру заделать так как-будто её нет. Как заделывать дыру думаю рассказывать не нужно, добавлю лишь что в целях экономии времени советую копировать браши прижатой клавишей SHIFT и подгонять их инструментом Vertex tool.

5) Так, теперь необходимо выделить все эти кусочки( прижатой клавишей CTRL в 3D проэкции выделять браши ), которые вы только что заделывали и сделать их браш энтити func_breakable, изменим следующие параметры в свойствах:
"Name"="toilet1_wallbreak1"
"Performance mode"="Limit Gibs"
"Prop data"="Stone.Small"
"Material type"="CinderBlock"
"Gibs Direction"="Use Precise Gib Dir"
"Precise Gib Direction"="0 0 0" (это направления осколков после разбивания, внимательно посмотрите чтобы координаты были перпендикулярны стене)
В закладке "Flags" поставьте галку напротив "Only Break on trigger"

6) Дальше для более реалистичного эффекта добавим пыль. Устанавливаем в func_breakable точечную энтити env_smokestack, изменим следующие параметры в её свойствах:
"Name"="toilet1_smokestack1"
"Pitch Yaw Roll (Y Z X)"="90 0 0"
"Initial state"="off"
"Spread at the base"="5"
"Spread speed"="5"
"Speed"="10"
"Particle start size"="35"
"Particle end size"="45"
"Emission rate"="2"
"Lenght of smoke trail"="80"
"Wind X\Y Angle"="45"
"Wind speed"="1"
"Base color (R G B)"="253 241 196"
"Translucency"="30"

7) Для большей атмосферности давайте добавим немного землетрясения. Используем точечную энтити env_shake. Поставьте её над сартиром, как это показано на скрине внизу

Далее заходим в настройки точечной энтити env_shake, и вписываем:
"Name"="toilet1_shake1"
"Amplitude(0-16)"="10"
"Effect radius"="232"
"Duration"="0.5"
"Frequency"="3"

8) Так, осталось только связать все эти энтити в единую структуру. Вот тут то нам и понадобится I/O система.
Браш энтити func_breakable, env_smokestack и env_shake будут активироваться через "Outputs"prop_physics.
Заходим сначала в свойства точечной энтити prop_physics, потом в закладку "Outputs"( именно от сюда будут даваться команды энтитям ):
для начала нажимаем на кнопку ADD, появляется строка действия.

В поле My output named вписываем "OnMotionEnabled" (при активации данной энтити сработает посыл для энтити, вписаной в поле Targets entities named)
В поле Targets entities named вписываем "toilet1_wallbreak1"
В поле Via this input вписываем "Break"
теперь, когда вы активируете унитаз Gravity gun'ом( в данном случае ничем другим не получится, потому что в закладке Flags напротив "Enable motion on Physcannon grab" стоит галка )сработает триггер, который мы создали при помощи I/O системы, и стена разрушится.

Дальше добавим активизацию пыли. Опять жмём на кнопку ADD:
В поле My output named вписываем "OnMotionEnabled"
В поле Targets entities named вписываем "toilet1_smokestack1"
В поле Via this input вписываем "TurnOn"

Сделаем так, чтобы пыль начала улетучиваться через 2 секунды. Повторяем аналогичную ситуацию с кнопкой ADD:
В поле My output named вписываем "OnMotionEnabled"
В поле Targets entities named вписываем "toilet1_smokestack1"
В поле Via this input вписываем "TurnOff"
В поле After a delay in seconds of вписываем "2" (через 2 секунды после активации унитаза пыль рассеится)

На последок добавим "землетрясение". Кнопка ADD... :
В поле My output named вписываем "OnMotionEnabled"
В поле Targets entities named вписываем "toilet1_shake1"
В поле Via this input вписываем "StartShake"



Всё ... "продвинутый" унитаз готов. Если вы хотите повторно использовать унитаз( это актуально в HL2:DM ), то нам придётся добавить ещё три энтити.

9) Создадим неподалёку от func_physics три точечных энтити : math_counter, logic_auto и point_template.

 

Наша задача cделать так, чтобы при разбивании унитаза активировался триггер, который изменяет значение энтити math_counter, которая в своё время активирует точечную энтити point_template, которая в свою очередь респавнит все энтити, учавствующие в "продвинутом" унитазе.
Энтити logic_auto необходима для активации унитаза при заходе на сервер, без logic_auto мы не увидим ни унитаза, ни "заделаной" дыры.
Теорию думаю вы освоили, давайте перейдём к конкретным примерам.

10) Заходим в свойства math_counter и пишем:
"Name"="toilet1_counter"
"Maximum Legal Value"="1"

потом в "Outputs", Кнопка ADD... :
В поле My output named вписываем "OnHitMax"
В поле Targets entities named вписываем "toilet1_counter1"
В поле Via this input вписываем "SetValue"
В поле With a parameter override of вписываем "0"

опять кнопка ADD... :
В поле My output named вписываем "OnHitMax"
В поле Targets entities named вписываем "toilet1_template1" (имя энтити point_template)
В поле Via this input вписываем "ForceSpawn"
В поле After a delay in seconds of вписываем "60" ( Важный момент, это время, через которое произойдёт респавн унитаза после его разбивания. Вы можете поставить другие цифры по вкусу )



11) Заходим в свойства point_template и пишем:
"Name"="toilet1_template1"
"Template 1"="toilet1"
"Template 2"="toilet1_wallbreak1"
"Template 3"="toilet1_smokestack1"

12) И наконец идём в свойства logic_auto, сразу заходим в "Outputs", жмём на кнопку ADD и вписываем:
В поле My output named вписываем "OnMapSpawn"
В поле Targets entities named вписываем "toilet1_template1"
В поле Via this input вписываем "ForceSpawn"



Ах да, добавим в "Outputs" энтити prop_physics ещё один триггер - Break. Иначе как math_counter узнает когда ему добавится параметр?
Идём в свойства prop_physics, далее в "Outputs" опять кнопка ADD...:
В поле My output named вписываем "OnBreak"
В поле Targets entities named вписываем "toilet1_counter1"
В поле Via this input вписываем "Add"
В поле With a parameter override of вписываем "1"



В итоге получаем:




Фухх ... теперь точно всё wacko ... По такому принципу можно сделать всё что угодно, только успевай фантазировать

Источник: http://foz.mapping.vbios.com/hammer4/advanced_toilet/
Категория: Маппинг | Добавил: HellMapper (01.10.2009)
Просмотров: 611 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа

Группа Steam

Наша кнопка

Поиск

Друзья сайта


  • Официальный блог


  • YIIbIpu-TEAM


  • DETLER-TEAM



  • Copyright WEDGe © 2024