Голосование

Как вы относитесь к играм в жанре "симулятор колонии"?












Оформление



Пользователей
  • Всего: 29196
  • Последний: hoy545
Сейчас на форуме
Пользователи: 3
Гостей: 497
Всего: 500

0 Пользователей и 1 Гость просматривают эту тему.

Тема: Создание сцен. Разрушаемый компонент  (Прочитано 1643 раз)

  • Сообщений: 26120
  • За победу в конкурсе "Знамя кальрадийца" И создали они сайт... За регистрацию на форуме не позже сентября 2008 года
  • Сервер Discord
    • Просмотр профиля
    • Всадники Кальрадии
Автор: Alisacat007

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

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


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

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

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

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

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

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

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

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

Example Script of Siege Tower (Пример скрипта осадной башни)




(Script Overview (Обзор скрипта))

DestructionStates (Состояние разрушения) могут быть одним или несколькими префабами. Разделены «,» (запятой).

DestroyedByStoneOnly (Разрушаем только камнями). Выставленное значение True (верно) означает, что только снаряды из мангонелей или требушетов могут повредить этот объект. Значение False (Ложь) означает, что этому объекту может повредить что угодно.

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

MaxHitPoint (Максимальное здоровье) - это начальные очки жизни этого объекта. Каждый раз, когда миссия перезагружается, текущее количество жизни объекта также будет сброшено на максимальное количество хитпоинтов.

ReferenceEntityTag (Справочный тег объекта) - это необязательный тег, когда префаб DestructionState имеет кадр, отличный от его родительского, или для копирования состояний анимации. Вы можете добавить дополнительный объект (с помощью скрипта 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, также применяется ко всем родительским элементам в иерархии. В настоящее время мы не знаем, как их большое количество в сцене влияет на производительность.

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

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

Examples (Примеры)


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

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


(Wall Hierarchy Edited (Отредактированная иерархия стен))

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

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


(Wall Script (Скрипт стены))

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

Origin of wall and merlon pieces (Создание частей стены и мерлонов):

Каждый мерлон представляет собой уникальный меш, который имеет свою исходную точку в нижней части стены (так же, как и вся стена).

(Wall Origin Merlon Hierarchy)         
    (Wall Origin Merlon)       

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

(Wall Origin Debris Hierarchy)         
(Wall Origin Debris)

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


(Debris Hierarchy)


(Debris)

Пример 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.

« Последнее редактирование: 01 Июля, 2023, 19:14 от Vanok »
  • Ник в M&B: [RUSMNB]Vanok
  • Фракция: Вегиры
И помните: "Хватит набивать посты" (NightHawkreal)

СиЧЪ Total War СиЧЪ Total War
Сайт "Всадники Кальрадии" не является СМИ. Администрация не несет ответственность за высказывания и публикацию каких-либо материалов, сделанные любыми пользователями форума, в том числе посредством личных и публичных сообщений. Материалы, размещенные на ресурсе третьими лицами, могут содержать информацию, не предназначенную для лиц, не достигнувших совершеннолетия. При обнаружении на ресурсе материалов, нарушающих законодательство Российской Федерации, необходимо обращаться к администрации.
Сайт работает на быстром VPS/VDS хостинге от FASTVPS


Powered by SMF 2.0 | SMF © Simple Machines LLC