Разрушаемые компоненты



Ниже поясняется система разрушений, которая дает сценоделам гораздо больше свободы в моделировании.

Characteristics (Характеристики)

Это ScriptComponent (компонент сценария), который может быть применен к любому объекту в сцене, если этот объект имеет collision body (коллизии).

Коллизия (от лат. collisio — столкновение). Коллизии играют одну из первых ролей в устройстве игрового мира. Моделирование физического взаимодействия игровых объектов целиком и полностью основано на обработке коллизий. Очень часто мы сталкиваемся с проблемами определения пересечения двух объектов: если это шутер нам требуется определить, попала ли пуля во врага, если это гонка, то нас интересует взаимодействие колес автомобиля с дорогой, в бильярде мы рассматриваем столкновение шаров. Существует огромное количество различных типов коллизий, равно как и способов их обнаружения.

Если не дать никакой дополнительной информации, script (сценарий) просто заставит объект исчезнуть после уничтожения. Он также появится снова, когда миссия будет окончена.

Скрипт может быть использован для уничтожения объектов в одном или более состояниях, с дополнительным звуком, частицами и динамическими объектами, появляющимися в каждом состоянии.

Любой существующий prefab (префаб) скрипта DestructibleComponent (осадные башни, ворота, баллисты и т.п.) будет продолжать работать, даже если вы удалите этот скрипт. Только их больше нельзя будет разрушить.

Prefab (Префаб) - это один из типов объектов, предназначений для многократного использования, который можно вставлять несколько раз в одну и ту же сцену.

У одного объекта может быть несколько скриптов DestructibleComponent. Например, таран разрушаем целиком, но у него также есть отдельные листы обшивки, которые тоже можно разрушить отдельно. Любой ущерб, нанесенный таким частям, также будет применен к целому объекту.

Разрушенные префабы всегда можно настроить и улучшить позже, не нарушая каких-либо сцен, потому что они не являются частью неповрежденного объекта (они создаются во время выполнения).

Example Script of Siege Tower (Пример скрипта осадной башни)
DestructionStates (Состояние разрушения) могут быть одним или несколькими префабами. Разделены «,» (запятой).
DestroyedByStoneOnly (Разрушаем только камнями). Выставленное значение True (верно) означает, что только снаряды из мангонелей или требушетов могут повредить этот объект. Значение False (Ложь) означает, что этому объекту может повредить что угодно.
CanBeDestroyedInititally (Может быть уничтожен изначально), определяет, может ли этот объект быть уничтожен уже при загрузке сцены. Это контролируется с карты кампании на основе процента разрушений от бомбардировок. Обычно это верно только для настенных зубцов. Но его также можно использовать для эстетических объектов, чтобы сцена выглядела более разрушенной с самого начала. Объекты, подлежащие уничтожению, выбираются случайным образом.
MaxHitPoint (Максимальное здоровье) - это начальные очки жизни этого объекта. Каждый раз, когда миссия перезагружается, текущее количество жизни объекта также будет сброшено на максимальное количество хитпоинтов.
ReferenceEntityTag (Справочный тег объекта) - это необязательный тег, когда префаб DestructionState имеет положение (frame), отличное от его родительского, или для копирования состояний анимации. Вы можете добавить дополнительный объект (с помощью скрипта DestructibleComponent) с правильным положением и снабдить его справочным тегом, чтобы возникший префаб DestructionState использовал это положение. Если ReferenceEntity отсутствует, то будет использоваться положение объекта со скриптом DestructibleComponent. Справочный объект (ReferenceEntity) также может быть использован в специальных скриптах, таких как castlegate (анимация открытия/закрытия), чтобы получить состояние анимации от справочного объекта (ReferenceEntity) и применить его к вновь созданному поврежденному объекту.
OriginalStateTag (Тэг исходного состояния) требуется только в том случае, если у вас есть несколько DestructionStates. Обычно, когда объект уничтожается, мы скрываем этот объект, к которому применен компонент скрипта, и порождаем новый объект из состояния DestructionState (без родителя). Но для некоторых объектов (таких как ворота) мы не хотим скрывать весь объект целиком, потому что он должен продолжать функционировать как ворота, пока не будет полностью разрушен. Используя OriginalStateTag, мы скроем только тот объект, к которому применен этот тег, а остальная часть иерархической структуры (частицы, точки опоры и т.д.) все равно будет видна. Любой DestructibleComponent, имеющий более одного destructionState, будет порождать поврежденные префабы как дочерние объекты.
HeavyHitParticlesTag (Тэг тяжело пораженных частиц) - это тег, который можно применить к любым дочерним объектам, имеющим систему частиц (particle-system). Эти частицы взорвутся один раз, когда определенное количество урона будет получено за один удар. Эта система частиц обычно используется во всех состояниях разрушения (она не является частью скрытых / порождаемых объектов).
HeavyHitParticlesThreshold (Предельное значение частиц сильного удара) - минимальный урон, который требуется получить за один удар, чтобы вызвать триггер взрыва (trigger particles) с тегом HeavyHitParticlesTag.


Effects (Эффекты)

Как правило, мы стараемся, чтобы спауна префабов было как можно меньше из соображений производительности, а также во избежание дублирования объектов. У вас есть доступ к следующим функциям для добавления эффектов:
  • При спауне префаба повреждения: все системы частиц на каждом объекте в иерархии будут автоматически взорваны один раз.
  • При спауне префаба повреждения: все динамические тела на каждом объекте в иерархии автоматически получат импульс от последнего удара, который разрушил предыдущее состояние.
  • При спауне префаба повреждения: все остальные меши на каждом объекте в иерархии останутся на своих местах, если у них нет флажка, что это динамическое тело (dynamic body-flag).
  • Часть иерархии объектов: частицы сильного удара должны быть разделены между всеми состояниями разрушения и воспроизводятся всякий раз, когда DestructibleComponent получает урон HeavyHitParticlesThreshold.
  • Вы можете воспроизводить свои анимации на компонентах DestructibleComponents, у которых есть скелет (например, ворота замка поврежденные тараном). Прогресс анимации будет передаваться вновь созданным поврежденным объектам.
  • Вы можете добавить сценарий типа AmbientSoundEmitter в префаб повреждения и получить звуковое сопровождение. Оно будет автоматически воспроизводиться при спауне объекта.
  • Помимо использования нескольких состояний, вы также можете добавить несколько дочерних объектов с помощью DestructibleComponents (например, крыши  тарана, которую можно разрушить по отдельности). Имейте в виду, что любое повреждение, наносимое дочернему элементу DestructibleComponent, также применяется ко всем родительским элементам в иерархии. В настоящее время мы не знаем, как их большое количество в сцене влияет на производительность.

Совет:
При любом ударе оружием уже будут воспроизводиться стандартные эффекты частиц и звуки ударов в зависимости от типа материала (дерево, камень и т.д.), Так что не сходите с ума с дополнительными эффектами.

Предупреждение:
Любой динамический меш, летающий в воздухе после спауна поврежденного объекта, является временным и не должен иметь физического контакта с игроком! Он не должен влиять на игровой процесс, потому что мы не синхронизируем его для игроков в многопользовательской игре.


Examples (Примеры)

Пример 1: Стена с разрушаемыми зубцами:
Что касается стен, то мы можем уничтожить только ее зубцы и ничего больше. Они могут быть повреждены только мангонелями/требушетами, и они получают только один удар, прежде чем будут уничтожены.

Hierarchy of WallSegment (Иерархия сегмента стены)

Вот как выглядит наша иерархия сцен для одной стены. European_castle_wall_a_l3 - это объект со скриптом WallSegment. Ему все равно, есть у него разрушаемые дети\подобъекты или нет. Каждый зубец стены - это отдельный дочерний объект, который имеет свой собственный скрипт DestructibleComponent. Как только они будут уничтожены, все они породят один и тот же префаб разрушения. Каждый зубец имеет объект debris_holder, который является пустым объектом. Он просто содержит тег ReferenceEntityTag и правильный кадр для создания префаба разрушения (важно из-за изгиба мешей: местоположение и вращение могут измениться по сравнению с родительским).

Script example of a single merlon (Пример скрипта одиночного зубца)

У каждого зубца есть точно такой же скрипт. Все они будут порождать префаб “мусора” (“debris” prefab), когда будут уничтожены. Мы решили заставить их уничтожаться после одного попадания из мангонеля, поэтому у них очень маленькие очки жизни (hitpoints). DestroyedByStoneOnly заставляет их игнорировать урон от всех других видов оружия (стрелы, мечи, топоры и т. д.). Из-за CanBeDestroyedInititally эти зубцы имеют шанс уже быть сломанными при входе в играемую миссию. Зубцы нуждаются в объекте ReferenceEntity, чтобы определить положение спавна для сломанных префабов.

Origin of wall and merlon pieces (Создание частей стены и мерлонов):
Каждый зубец представляет собой уникальный меш, который имеет свою исходную точку в нижней части стены (так же, как и вся стена).


Каждый зубец имеет один и тот же разрушенный префаб местного происхождения. debris_holder имеет ReferenceEntityTag.


Каждый дочерний элемент префаба мусора (debris) является объектом с флагом «dynamic» и имеет коллизию. При спауне он автоматически получит последний импульс, который получил DestructibleComponent при уничтожении.


Пример 2: Осадная баррикада:
Осадные баррикады - это очень простые объекты. Они являются статичными объектами, и их единственная функция - блокировать входящие снаряды. Однако их можно уничтожить в несколько этапов. Каждый этап будет выглядеть более разрушенным, чем предыдущий.

The different destruction states of a siege barricade (Различные состояния разрушения осадной баррикады):


В настоящее время эти различные состояния не имеют никаких особых частиц или динамических объектов, но они могут быть легко добавлены позже. Объекты с флагом “dynamic” body (“динамического” тела) и системы частиц будут автоматически запускать триггер при спауне.

Tip (Совет):
У каждого этапа разрушенной баррикады также есть свое уникальная коллизия. Это позволяет людям легче пускать стрелы через более поздние разрушения, а также перелезать через state_5.

Hierarchy of siege barricade in scene (Иерархия осадной баррикады в сцене)
Siege Barricade script component (Компонент скрипта осадной баррикады)


siege_barricade_a - это пустой меш. Он просто содержит скрипт siege_barricade_a_state1 - это фактический меш + тело и имеет тег “original_state”. Когда баррикада получит достаточный урон, siege_barricade_a_state1 станет невидимым, следующий префаб повреждения будет порожден и добавлен в siege_barricade_a как дочерний. Это важно, потому что DestructibleComponent должен быть проинформирован о попаданиях, и он может сделать это только в том случае, если у него есть (видимая) коллизия на себе или на дочернем объекте.

Последнее состояние (state_5 в данном случае) будет порождено, когда объект будет иметь 0 здоровья (т.е. полностью уничтожен). Остальные состояния будут использоваться между MaxHitPoints и 0.

Когда миссия перезагружается (здоровье сбрасывается до MaxHitPoint), исходный объект (объект с тегом «original_state») снова становится видимым.

Каждый префаб DestructionState имеет одинаковые координаты и разворот, поэтому нам не нужно использовать ReferenceEntity.





- используйте эту кнопку если вы обнаружили ошибку/искажение содержимого/отсутствие контента в новости или если хотите сообщить администрации о выходе новой версии мода и т.п.

Комментариев 0

Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Онлайн

Сейчас на сайте: 96
Гостей: 92

Пользователи: 

Последние комментарии

СУНДУКИ В A CLASH OF KINGS
Samiraldos, Сегодня, 06:23
В версии 8.0 в Волантисе сундук находится тут https://ibb.co/x39QQBN...
СУНДУКИ В A CLASH OF KINGS
Samiraldos, Сегодня, 05:14
Извините что пишу в минус. Но скрин Квохора уже не актуален. В версии мода 8.0 вид улиц города...
Прохождение мода A CLASH OF KINGS
Samiraldos, Вчера, 07:44
"Турнир в Девяти Звездах" Кому подарок то отдавать? Кто Кастелян?...
A CLASH OF KINGS (Юниты и советы)
Samiraldos, Вчера, 07:13
А Безликих нет в этом моде? Я попутал. Изначально я играл когда то в 7 версию мода "A World of Ice...
MOD A Clash of Kings
Samiraldos, 16 ноября 2024 08:29
Этот мод гораздо лучше чем World of Ice and Fire. Все работает и все просто. Играю на последней...
ПРОХОЖДЕНИЕ A WORLD OF ICE AND FIRE
Samiraldos, 15 ноября 2024 07:18
Простейший квест в деревне на обучение крестьян для защиты в версии 9.3 не работает :) Надо...
MOD A World of Ice and Fire
Samiraldos, 15 ноября 2024 06:46
Чит-магазин к 9.0 от Тура не работает на версии мода 9.3...
MOD 1812-1815 Сингальный наполеоник варс
kitel, 14 ноября 2024 17:42
у меня черный экран. Что делать?...
Diplomacy 4.3 - Mrcmod and bugfixes
Kirito Kirita, 13 ноября 2024 19:37
Здравствуйте, а нет патча или возможности, чтоб работали ачивки?...