Ну что господа? Вдоволь по разносив стены и по ломав все двери в округе. Настало время всё починить и усовершенствовать. Ну да ладно, хватит разглагольствовать. Эта статья научит вас создавать так называемую «закреплённую физику». Мы научимся делать физические двери, занавески с самой авторитетной карты phystown, болтающуюся вывеску, и разберём основы создания реально работающей КАТАПУЛЬТЫ :). Мне, конечно, нравится наше насыщенное общение. Но давайте, наконец, приступим :). Для каждой главы рекомендую создавать новую карту, для того чтобы вы не путались. Что ж поехали: Глава №1: Создаём физические двери. Способ №1. Создаём новый браш с произвольными размерами, он будет дверью. Делаем его энтитей func_physbox. Настраиваем: Name - phys_door Заходим во флажки и ставим галочку напротив: Only Break on Trigger (чтобы в результате ваших экспериментов, дверь вдруг не сломалась :E ) Теперь создаём POINT entity - phys_motor, настраиваем следующим образом: Attachet Object (прикреплённый объект) - phys_door Во флажках убираем галку напротив: Start On - (для того чтобы это была дверь, а не лопасть винта :Е ) Размещаем маленький шарик в центре энтити так, чтобы он имитировал ось, вокруг которой будет вращаться объект. Вот так: Примечание 1: phys_motor служит для создания моторов, вы видели на стандартных картах, ловушки которые рубят зомби пополам? Так вот. Этой энтитей всё и делается. Прикреплённый объект будет вращаться только по 1-ой оси, с 2-мя креплениями (ака петлями). Примечание 2: Изначально (по умолчанию) ось вращения задаётся как ”Y”. Вы можете поменять это, вращая энтитю. Всё! А вы ждали это будет долго? :Е Не стоим на месте. Двигаемся дальше. Способ №2. Заменяем наш phys_motor на phys_ballsocket, настраиваем: Attachment 1 - phys_door Во флажках, то что было с галочкой оставляем без галочки и наоборот. Располагаем, наше крепление так, чтобы его центр являлся осью вращения и в том месте где, по вашему мнению, будет первая дверная петля Дублируем наше крепление и располагаем там, где, по вашему мнению, будет петля № 2. У меня вот что: Примечание 1: phys_ballsocket позволяет прикрепить объект к 1-ой точке. И независимо от настроек он будет болтаться только вокруг неё, до тех пор, пока его не разобьет какой-нибудь output с параметром Break. Примечание 2: С помощью данной энтити делаются занавески и отваливающиеся вывески. ВНИМАНИЕ! НЕ БОЛТАЮЩИЕСЯ ВЫВЕСКИ. В общем не вникайте. Читайте дальше. Ну вот и кончилось весёлое времечко. Настало время для более сложной работы. Глава №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, зависит, как верёвки будут соприкасаться с трупом. Ну что подвесили? Эх вы! Маньяки! :Е У меня вот: Теперь заставим всё это ТЕЛО работать на нас :E. Создаём на карте поинт энтитю phys_pulleyconstraint(очень опасная вещь, см. примечание). Настраиваем: Attachment 1 - sign_rope_start_01 Attachment 2 - sign (наш труп :E) Теперь флажки: Уберите везде галочки и поставьте только на No Collision until break. Расположите эту энтитю внутри move_rope с именем sign_rope_start_01. Так первая часть готова. Теперь создадим phys_ballsocket. Настроим так: Attachment 1 - sign_rope_start_01 Attachment 2 - sign (наш труп :E) Play sound on break - debris/bustmetal1.wav Расположите эту энтитю внутри move_rope с именем sign_rope_start_02. Так вроде всё. Скрестив пальцы, компилируем… Неужели заработало? Гы. Вот что вышло: Ну что? Поехали примечания? Примечание 1: phys_pulleyconstraint используется для закрепления физических объектов с учётом центра тяжести объекта. То есть помимо того, что объект будет вращаться вокруг phys_pulleyconstraint, он ещё и будет вращаться вокруг своего центра тяжести. Поэтому если хотите получить нужный эффект при реальных вывесках, а не трупах, то сместите центр тяжести объекта в то место куда будет крепиться верёвка. Внимание: я рекомендую использовать phys_pulleyconstraint только с верёвками. И заполнять оба поля Attachment. Иначе карта при загрузке будет вылетать. Что не есть гуд. Примечание 2: Если вы хотите, чтобы ваша тряпичная кукла не представляла никакого препятствия для игрока (а такое желание появится), то просто во вкладке Flags поставьте галочку напротив Debris. Ну тут всё ясно. Примечание 3: данный способ очень полезен не только для вывесок. Вы так же можете создавать и лампы, подвешенные на проводах, и сами провода. В общем, все, что выше крыши :). Глава №3: Создаём катапульту. Наверно самая ожидаемая и самая простая часть из всей серии моих статей. Ну что господа? Вы наконец-то дождались! Приступим. Для данной статьи хочу немного вас ограничить. Здесь будет важно в каком окне что вы создаёте внимательно смотрите на скриншоты и повторяйте всё за мной. И ещё я хочу ввести такое удобное понятие как «щелчок». При поворотах объекта с зажатым 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(когда энтитя появится на карте, то на какой градус она будет повёрнута, относительно поля Distance) - 0.5 Start directon(стартовое направление), если вы сделали как у меня, то – Backward. Speed(скорость вращения, чем меньше, тем медленнее) – на своё усмотрение, я поставил 25. В данном случае регулируется точность наведения :). Во флажках убираем галочку с Not Solid(чтобы ложка не пролетала сквозь наше прицельное приспособление) и, если вы сделали как у меня, то ставим галочку на Y Axis(определяет ось вращения). Если вдруг ложка всё равно будет пролетать сквозь прицел или наоборот бить слишком слабо, то найдите компромисс между мощностью и толщиной прицела. Можно ещё поменять задержку перед отключением нашей ложки. Теперь создайте себе цель и заряды в виде prop_dynamic или func_physbox. Но учтите: если ваш объект для запуска очень тяжёлый, то во-первых вы не можете его поднять, во-вторых сила катапульты должна быть больше а задержка пред отключением – меньше. После косметического ремонта моя катапульта стала выглядеть вот так: Красиво. Кстати вы можете её скачать в исходниках и использовать, как пожелаете. Наслаждайтесь. Я целый день угробил на разбирательство и постройку этой катапульты. Специально для вас. А вы не довольны! И не гладите меня по головке В общем это всё, все свободны. Удачи. Она вам понадобится!
Источник: http://www.source-inside.ru/index.php?id=100 |