func_breakable_surf
Описание
Объект func_breakable_surf используется для создания разрушаемых стеклянных поверхностей.
Особенности использования
- Этот объект обновляется в каждом раунде. Это означает что любые изменения объекта НЕ будут наследоваться в последующих раундах.
- Объект должен быть установлен там, где будет использоваться.
- На карте может быть установлено множество этих объектов
- Объект НЕ отбрасывает Lightmap-тени и динамические тени.
- Для правильной работы объекта необходимо:
- 1. полностью покрыть его материалом NODRAW (tools/toolsnodraw);
- 2. выбрать ОДНУ любую прямоугольную поверхность объекта и наложить на неё специальный материал glass/glasswindowbreak070a; если поверхность не будет прямоугольной, то в игре она автоматически будет преобразована в прямоугольную прямо во время разрушения стекла.
Ошибки
Не обнаружены.
Заметки
Материал для стекла вы можете сделать сами, если посмотрите как созданы материалы glass/glasswindowbreak070a и glass/glasswindowbreak070b.
Параметры
- Prop Data - (должно быть всегда равно "Glass.Window");
- Material Type – (должно быть всегда равно "Glass");
- Surface Type – (должно быть всегда равно "Glass");
- Fragility – степень непрочности стекла; 100 – обычная прочность, при которой кусочки стекла обрушаются под весом соседних кусочков стекла; 500 – очень низкая прочность, при которой все кусочки стекла обрушаются сразу же как только стекло будет повреждено; 0 – очень высокая прочность стекла, при которой кусочки стекла не обрушатся даже когда вокруг них уже нет других кусочков стекла – для обыкновенных стёкол это выглядит не реалистично; используется только если свойство "Surface type" равно "Glass";
- Upper-left corner (Read-Only) – значение этого поля автоматически заполняется редактором Hammer;
- Upper-right corner (Read-Only) – значение этого поля автоматически заполняется редактором Hammer;
- Lower-left corner (Read-Only) – значение этого поля автоматически заполняется редактором Hammer;
- Lower-right corner (Read-Only) – значение этого поля автоматически заполняется редактором Hammer;
- Error Level (Read-Only) – значение этого поля автоматически заполняется редактором Hammer;
- Pressure Delay - задержка перед тем как сломаться от давления, оказываемого со стороны другого объекта или игрока (секунды); работает только при включенном флажке "Break on Pressure";
- Damage Filter – имя объекта-фильтра, который будет контролировать типы повреждений которые можно будет наносить этому объекту;
- Render Mode – режим рендеринга объекта;
- FX Color (R G B) – цвет объекта;
- FX Alpha (0-255) – прозрачность объекта; 255 – полностью не прозрачен; 0 - полностью прозрачен; не используется если свойство "Render Mode" равно "Normal" или "Don’t Render";
- Render FX – эффект рендеринга объекта; например: мигание, плавное появление/исчезновение и т.п.;
- Minimum Light Level – минимальный уровень освещённости этого объекта; высокое значение этого свойства приведёт к тому, что объект станет очень ярким, будет хорошо заметен в темноте и на нём не будут различаться Lightmap-тени от других объектов; используется только в процессе компиляции карты;
Флаги
- Crack Decals - #назначение не известно#; #возможно не работает#;
- Take Damage from Held Objects – объект сломается если игрок заденет его и в момент прикосновения объекта будут касаться какие-нибудь физические объекты;
- Break on Pressure – объект сломается если игрок окажет на него давление; например: когда игрок наступает на объект сверху; не используется если установлен флажок "Only Break on Trigger";
- Break immediately on Physics – объект сломается если его заденет любой другой физический объект; будет ли объект ломаться зависит от типа материала, указанного в свойствах "Material Type" и "Prop Data"; не используется если установлен флажок "Only Break on Trigger";
- Break on Pressure – объект сломается если игрок окажет на него давление; например: когда игрок наступает на объект сверху; не используется если установлен флажок "Only Break on Trigger";
Inputs
- Shatter <X Y RADIUS> - сломать объект в координатах X Y и сделать отверстие в этом месте радиусом RADUIS; координаты X и Y должны быть значениями от 0.0 до 1.0, где "0 0" – верхний левый угол, "1 1" – правый нижний угол;
- Break – удалить объект точно так же как это делает функция Kill;
- SetHealth <integer> - переключиться на следующую анимацию объекта;
- AddHealth <integer> – добавить объекту указанное количество здоровья;
- RemoveHealth <integer> – отнять у объекта указанное количество здоровья;
- SetDamageFilter <string> - установить новое значение свойства "Damage Filter";
- Color <R G B> - установить новое значение свойства "FX Color";
- Alpha <integer> – (от 0 до 255) установить новое значение свойства "FX Alpha";
Outputs
- OnBreak – вызывается тогда, когда объект ломается;
- OnHealthChanged <float> – вызывается тогда, когда у объекта изменится количество "жизни"; возвращает процент жизни относительно своего максимального значения (от 0.0 до 1.0).
Карта
csssdk_func_breakable_surf.vmf
Используются объекты
- func_breakable_surf
- func_button
- func_detail
- trigger_once
- filter_damage_type
- env_cubemap
- weapon_smokegrenade
- weapon_hegrenade
Описание карты
На карте поставлено несколько стёкол. Первое стекло имеет увеличенную прочность, благодаря которой его кусочки могут висеть в воздухе. Это выглядит не очень реалистично но таким настройкам тоже можно найти применение. Второе стекло поставлено со стандартными настройками. В него можно пострелять и посмотреть как оно разрушается. Третье стекло имеет очень низкую прочность, поэтому любое повреждение этого стекла приведёт к моментальном обрушению всех его кусочков. Выглядит довольно зрелищно. Так как нет нормального способа, позволяющего разбивать стёкла в момент касания его игроком, для четвёртого окна был поставлен объект trigger_once, охватывающий всю поверхность окна. Когда игрок касается объекта trigger_once, вызывается функция "Shatter" и стекло трескается, но не ломается. Ломаться стекло начнёт когда игрок пройдёт сквозь него. Для игрока это выглядит так, как будто бы он надавил на стекло и оно треснуло. Очень полезный приём, позволяющий реалистично разбивать стёкла. Обратите внимание, что объект trigger_once полностью покрывает Brush стекла, поэтому стекло разбивается даже в том случае, когда игрок подойдёт к нему сзади. Пятое стекло можно разбить нажатием на кнопку пульта, либо бросив в него гранатой. По-другому это стекло не разбить. Для стекла установлен фильтр повреждений filter_damage_type, который запрещает любой тип повреждений, кроме типа "CLUB". Именно такой тип повреждений наносят гранаты когда попадают во что-нибудь. Обратите внимание, что взрывом это стекло не разбить. На стекле остаются следы от пуль, однако они остаются только с одной стороны стекла. Можете сами в этом убедиться, обойдя стекло с другой стороны. Когда стекло треснет для него по-прежнему останется действовать фильтр повреждений filter_damage_type. Это приведёт к тому, что через такое стекло можно будет беспрепятственно стрелять, но нельзя будет "добить" стекло, кроме как бросить в него ещё гранат или пройти сквозь него. Чтобы избежать подобного в ваших картах, вам нужно добавить для такого стекла новый Output:
OnBreak | !self | SetDamageFilter | <none>
Это отменит действие фильтра повреждений и стекло будет поддаваться разрушению с помощью любого известного вам способа. Нажатие на кнопку пульта приведёт к созданию ровной дырочки радиусом 40 юнитов в самом центре этого стекла.
Последнее стекло расположено горизонтально. Его можно сломать чем угодно, но создано оно для того, чтобы показать что будет, когда игрок встанет сверху на стекло. Когда игрок встанет на стекло, оно издаст звук и через 2 секунды разрушится, но разрушится не так, как это было в случае с другими стёклами на карте, а так, как будто бы оно создано при помощи объекта func_breakable. Не очень реалистично и выглядит по-топорному.
Если Вам понравилась эта страница, Вы можете разместить где-нибудь ссылку на неё: