стекла
Бьющиеся и небьющиеся стекла
В этой статье мы рассмотрим создание бьющихся и небьющихся стекол. Перед прочтением статьи ознакомьтесь со следующими энтити-объектами:
func_breakable
func_wall
1. Бьющиеся стекла
Нет ничего проще, чем создание стекол :) Вот как создаются бьющиеся стекла:
Создайте браш в форме стекла любых размеров (оптимальная толщина 2-4 юнита). Для закрашивания хорошо подходят стандартные текстуры со словом GLASS такие как: GLASSBRIGHT, GLASSBLUE1, GLASSGREEN. Мы будем использовать последнюю, GLASSGREEN. Вообще-то для стекол можно использовать практически любую текстуру (кроме специальных и воды, разумеется), т.к. все-равно объект будет прозрачным, но текстуры со словом GLASS подойдут лучше.
На рисунке ниже Вы можете видеть три стекла, сделанные из разных энтитей с различными свойствами: левое — разбиваемое, центральное и правое — неразбиваемые.

Итак, Вы создали браш, теперь превратите его в func_breakable и выставьте следующие свойства:
Strength — 30 (прочность стекла. Чем больше значение, тем больше пуль необходимо выстрелить по стеклу, чтобы оно разбилось);
Material Type — Glass (материал, естественно, выбираем стекло);
Render Mode — Texture (этот режим делает объект прозрачным, также можно использовать Additive);
FX Amount — 40 (степень прозрачности. Чем ближе значение к 0, тем стекло прозрачнее и наоборот, чем ближе к 255, тем — непрозрачнее. При fx amount = 0 стекло будет полностью невидимым)
Бьющееся стекло готово! Мы же говорили, что это очень просто.
Для бьющихся стекол (объект func_breakable) дополнительно можно выставить следующие флаги:
Only Trigger — если отмечено, то стекло разобъется только от триггера (стеклу, т.е. объекту func_breakable надо дать имя и активировать триггером, чтобы оно разбилось);
Touch — если отмечено, то стекло разобъется от прикосновения игрока;
Pressure — если отмечено, то стекло разобъется от давления (игрок встал на стекло). Можно, например, использовать для создания ломающегося льда;
Instant Crowbar — мгновенное разрушение от монтировки (используется в HL)
2. Небьющиеся стекла
Небьющиеся стекла можно изготовить тремя способами:
a) изспользуем func_breakable
Material Type — Unbreakable Glass (материал: неразбиваемое стекло);
Render Mode — Texture;
FX Amount — 40
б) изспользуем func_breakable и флаг Only Trigger
Material Type — Glass;
Render Mode — Texture;
FX Amount — 40
Флаги:
Only Trigger — если установлен этот флаг, то игрок разбить стекло не сможет (ни ножом, ни оружием)
в) изспользуем func_wall
С func_wall еще проще, т.к. необходимо выставить только параметры отображения.
Render Mode — Texture или Additive;
FX Amount — 40 (степень прозрачности. Значения от 0 до 255)
А вот так выглядят стекла в игре. Как видите, визуальных различий между разбиваемыми и неразбиваемыми стеклами нет.

Как видите, вариантов много. Какой использовать? Да, любой. Хотя у func_wall выставлять меньше свойств.
Стекло прозрачное только с одной стороны
В этой статье мы расскажем как можно создать стекло прозрачное с одной стороны и непрозрачное с другой. Статья взята с сайта http://countermap.counter-strike.net/Tutorials. Благодарим автора: Waldo.
В итоге у нас получится следующее:

На картинке Вы видите два стекла. Они изготовлены по схожей технологии, однако левое можно разбить, а правое нет (о разбиваемом одностороннем стекле Вы можете прочитать в следующей статье Учебника). А пока что займемся изготовлением неразбиваемого стекла.
Все довольно просто. Создадим в нужном месте браш — будущее стекло — и закрасим его с одной стороны текстурой GLASSGREEN (или любой другой подходящей для стекла), а с противоположной стороны — текстурой {BLUE (см. рис. ниже).

Теперь превратим этот браш в func_wall и выставим следующие свойства (сюрприз, сюрприз :)
Render Mode — Solid;
FX Amount — 255
Вам ничего не напоминают такие свойства? Правильно, именно такие свойства мы выставляем для всех прозрачных решеток, заборов, лестниц и прочих подобных объектов с синими частями. Ведь синие части в игре будут прозрачными. А это означает, что сторона стекла с текстурой {BLUE будет абсолютно прозрачной, а противоположная, которая с текстурой GLASSGREEN — полностью непрозрачной (при тех же свойствах).
Итак, полдела сделано. Почему только полдела? А вот почему. Согласитесь, что будет довольно странно видеть непрозрачное стекло с одной стороны и не видеть ничего с другой (ведь синяя часть будет вообще прозрачной, как-будто стекла там и нет). Нехорошо.
А решается данная проблема очень просто. Необходимо создать обычное стекло func_wall (точно таких же размеров, как и первое), закрасить его на этот раз уже со всех сторон текстурой GLASSGREEN и выставить следующие свойства:
Render Mode — Texture;
FX Amount — 70 (это прозрачность стекла, значения от 0 до 255)

Размещаем второе стекло вплотную к первому, к той стороне, которая покрашена текстурой {BLUE. Теперь игрок будет смотреть через это второе стекло, которое имеет прозрачность 70, и прекрасно будет видеть все, что находится за ним (в нашем случае заложника, см. самую первую картинку). Подойдя же к стеклу с другой стороны, игрок ничего не увидит. Трюк работает!
Если все же не понятно как именно размещать второе стекло, вот картинка с видом сверху. Два фиолетовых прямоугольничка — это и есть два наших стекла.

Ну, а в каких местах применять такое стекло решать Вам. Можно разместить его в месте, где нужно дать возможность покемперить одной из команд, например, террористам, защищающим комнату с заложниками и т.п.
В нашей следующей статье мы расскажем как сделать точно такой же трюк, но только с разбиваемыми стеклами. Да, конечно, мы будем использовать вместо func_wall — func_breakable, но это еще не все. Есть еще небольшая хитрость.
Стекло прозрачное с одной стороны (бьющееся)
В этой статье мы продолжим наши эксперименты c односторонними стеклами и сделаем их разбиваемыми. Если Вы хорошо усвоили материал предыдущей статьи и поняли, как работает трюк с односторонним стеклом, то никаких проблем у Вас не возникнет. Статья взята с сайта http://countermap.counter-strike.net/Tutorials. Благодарим автора: Sam.
Итак, одностороннее стекло у нас уже есть. Теперь сделаем его разбиваемым. Для этого первое стекло, у которого одна сторона покрашена текстурой {BLUE, превратим из func_wall в func_breakable (выделяем в 3d-виде, жмем Alt-Enter и в списке выбираем func_breakable).
Теперь выставим свойства:
Name — glass1 (имя стекла, укажите обязательно);
Material type — Glass;
Strenght — 50 (в данном случае прочность стекла не важна, об этом чуть далее);
Render Mode — Solid;
FX Amount — 255
Как видите, параметры отображения прежние. Теперь выделяем второе стекло, которое полностью окрашено текстурой GLASSGREEN. Также превращаем в func_breakable и выставляем следующие свойства:
Name — glass1 (обязательно точно такое же имя, как и у первого стекла);
Material type — Glass;
Strenght — 50 (прочность);
Render Mode — Texture;
FX Amount — 70 (прозрачность от 0 до 255, чем ближе к 0, тем стекло прозрачнее)
Казалось бы, все — запускай игру и разбивай стекло. Но не все так просто. Стекла-то у нас два, следовательно, и разбивать надо 2 стекла, а игрок-то в полной уверенности, что стекло одно. Разбив одно из стекол, игрок с удивлением обнаружит второе и поймет, что его жестоко обманули :)
Наша задача состоит не только в том, чтобы игрока обмануть, но и чтобы он обмана не заметил :) Вот именно поэтому надо чтобы оба стекла разбивались одновременно, когда игрок разбивает только одно из них.
Перейдем к реализации этой идеи. Посмотрите на картинку ниже.

Пунктиром обозначен новый объект, который мы сейчас создадим. Это тоже func_breakable. Размеры у данного объекта точно такие же, как и у стекол, только по толщине несколько шире (шире чем оба стекла вместе взятые).
Закрасим все стороны func_breakable текстурой {BLUE. На рисунке ниже данный объект показан в 3d-виде (стекол не видно, т.к. новый объект должен быть немного толще, т.е. оба стекла находятся как бы внутри этого объекта).

Свойства func_breakable следующие:
Target on break — glass1 (вписываем сюда имя двух стекол, оно одинаковое);
Material type — Glass;
Strenght — 1 (прочность*);
Render Mode — Solid;
FX Amount — 255
Вот и все. Теперь на самом деле игрок будет разбивать вовсе не стекла, а наш новый абсолютно прозрачный объект func_breakable. А тот, в свою очередь, мгновенно разобьет оба стекла сразу. Игрок обманут, стекла разбиты, трюк работает, можно и пивка попить :)
* Желаемую прочность стекол необходимо выставлять в параметре Strenght именно нового объекта func_breakable. Понятно, что игрок будет стрелять не в стекла, а в этот невидимый объект, поэтому прочность самих стекол в расчет не принимается.
Как говорила несколько лет назад в одной рекламе певица Валерия: «результат налицо»:
Вот и все. Со стеклами разобрались.
