Что делает сцену сценой осады
Введение
Этот список особенностей, специфичных для осады, поможет вам при создании городов и замков, подходящих для осад.
Осаждаемые стены
Осаждаемые стены — это позиции стен, которые поддерживают функцию пробитых стен в сценах осады. Нам нужно будет указать целые и разрушенные состояния и их важные позиции, а также изменения навигационной сетки ИИ, если образуется пролом.
- Добавьте тег родительской сущности, который впоследствии будет использоваться на осадных лестницах и осадных башнях (например: wall_segment_left, wall_segment_right). Этот тег будет определять, какие осадные машины относятся к каким полосам, и будет использоваться для переменной «target wall segment» на осадных машинах.
- Добавьте тег «broken_child» к разрушенной стене и тег «solid_child» к целой стене.
- Добавьте две дочерние сущности к целой стене. Первая — для места, где защитники будут ждать приближения атакующих к замку, вторая — для места, где они должны стоять в оборонительной позиции. Эти сущности должны иметь теги «wait_pos» и «middle_pos» соответственно.

- Для разрушенной стены добавьте три дочерние сущности. Они должны иметь теги «wait_pos», «middle_pos» и «attacker_wait_pos». Первые два аналогичны целой стене, а attacker_wait_pos — это место, где атакующие войска будут ждать (предпочтительно за укрытиями), пока другие осадные орудия занимают позицию.
- Добавьте скрипты WallSegment со значениями по умолчанию к разрушенной и к целой стене.
- Скрипт WallSegment (родительская сущность)
- Укажите сторону осаждаемой стены (она должна быть либо левой, либо правой; средняя зарезервирована для надвратной башни независимо от её положения).
- Введите идентификаторы навигационной сетки, которые вы будете использовать для этой осаждаемой стены.
- Пересоздайте и промаркируйте навигационную сетку соответствующим образом.
- Убедитесь, что новые грани навигационной сетки имеют правильные уровни.

| Навигационная сетка целой стены | Навигационная сетка разрушенной стены |
|---|---|
![]() |
![]() |
- Если вы не собираетесь использовать идентификаторы навигационной сетки под обломками, вы можете ввести «-1» в соответствующие ID в скрипте wall segment.
- В этом примере, когда стена не разрушена, 328 будет соединяться с 342, 331 будет соединяться с 391, 341 будет активен, а 351 будет активен.
- Когда стена разрушена и образован пролом, 328 будет соединяться с 371, а 381 будет соединяться с 391, и 361 будет активен.
- Таким образом, если вокруг осаждаемой стены много обломков, гораздо меньше агентов будут застревать из-за отсутствия навигационной сетки.
- На этом изображении пустые пространства между навигационными сетками были преувеличены для наглядности.
Ворота замка
Ворота замка — это место и префабы, которые взаимодействуют с тараном. Нам нужно будет использовать 2 ворот: 1 внешние, которые будут разбиты тараном, и внутренние, которые будут разбиты обычными атаками войск.
- Разместите внешние и внутренние ворота.
- Внешние ворота должны иметь тег «outer_gate», а внутренние — тег «inner_gate».
- Скрипт CastleGate
- Введите идентификатор навигационной сетки, который вы будете использовать для ворот.
- Установите переменную стороны (side) как «middle».
- Измените HP ворот в соответствии с их положением и уровнем (для внешних ворот HP должно быть: 12000 на уровне 1, 15000 на уровне 2 и 18000 на уровне 3. HP внутренних ворот должно быть 1000 для всех уровней.)
- Пересоздайте и промаркируйте навигационную сетку соответствующим образом.
- Убедитесь, что новые грани навигационной сетки имеют правильные уровни.
- Отрегулируйте позицию «middle_position» внешних ворот. Она должна быть очень близко к внутренней стороне внутренних ворот.
- Вы можете отключать навигационные сетки для открытого состояния ворот, используя идентификатор навигационной сетки [navigationmeshidtodisableonopen].

- Связанные префабы
- Aserai_castle_gate_inner_l1
- Aserai_castle_gate_outer_l1
- Battania_castle_gate_inner_l3
- Battania_castle_gate_outer_l3
- Empire_castle_gate_inner_l2
- Empire_castle_gate_inner_l3
- Empire_castle_gate_outer_l2
- Empire_castle_gate_outer_l3
- European_castle_gate_outer_l1
- European_castle_gate_outer_l2
- Khuzait_castle_gate_outer_l1
- Sturgia_castle_gate_inner_l3
- Sturgia_castle_gate_outer_l3
Точки развёртывания
Все осадные машины размещаются под точками развёртывания. Эти точки впоследствии в миссии становятся выбираемыми позициями, в которых игроки могут размещать своё осадное снаряжение, такое как баллисты, таран или осадные башни.
- Должно быть 4 таких точки для осадных машин защитника. 4 для осадных машин атакующего. 2 для каждой осадной башни. И одна для тарана.
- Осадные машины могут быть связаны с этими точками развёртывания либо путём размещения их в радиусе действия точки, либо с помощью тегов.

- Лучшие практики
- Убедитесь, что радиусы точек развёртывания не перекрываются.
- Вам нужны разные точки развёртывания для каждого слоя (layer), например:
- Поскольку стены меняются с каждым слоем, осадные машины защитника естественным образом должны находиться в разных позициях на их вершине.
- Поскольку положение надвратной башни меняется, тарану нужен другой путь. То же самое касается осадных башен.
Второстепенные осадные машины
Второстепенные осадные машины — это дальнобойные осадные машины, которые поддерживают штурм или пытаются отразить атакующих. К ним относятся баллисты и манганели для обеих сторон и требушеты для атакующего.
- Сущности манганели и баллисты должны быть включены для каждой позиции защитника, а префабы манганели, баллисты и требушета должны быть включены для каждой позиции атакующего.
- Должно быть 4 позиции «точки развёртывания» для защитников и 4 для атакующих.
- И осадные машины, и точки развёртывания имеют переменную «side» (сторона), убедитесь, что эти переменные корректны.
- Ни одна осадная машина не должна находиться под управлением более чем одной точки развёртывания.
- Связанные префабы
- Ballista_a_spawner
- Ballista_b_spawner
- Mangonel_a_spawner
- Mangonel_b_spawner
- trebuchet_a_spawner
Осадная башня
Осадные башни — это префабы, которые поддерживают ситуацию, когда осаждающие строят осадную башню на карте кампании. Они заменяют одну из полос стены. Если осадная башня развёрнута, она заменит осадную лестницу на этой «стороне». Если на полосе есть пролом, осадную башню нельзя развернуть на этой полосе.
- Разместите подходящую осадную башню в сцене.
- Отрегулируйте угол выдвижной рампы, либо выбрав рампу и повернув её, либо используя параметр «RampRotationDegree» в скрипте «SiegeTowerSpawner».
- Если у вашей выходной рампы большой угол наклона вверх или вниз, убедитесь, что префаб навигационной сетки подходит к рампе, иначе создайте новый.
- Постройте путь для осадной башни, используя инструмент путей.
- Скрипт SiegeTowerSpawner
- Введите название пути.
- Введите целевой сегмент стены (target wall segment). Это тег, который мы добавили к стене, имеющей позиции middle и wait. Осадная башня будет искать этот тег, а затем искать его дочерние сущности, чтобы направлять войска ИИ соответствующим образом.
- Введите тег стороны (side tag).
- После того как башня подключена к своему пути, разместите точку развёртывания в начале пути, в связи с осадной башней.
- Вы можете пометить зубцы (мерлоны) на пути осадной башни тегом
tower_merlon. Эти зубцы будут удалены, как только осадная башня развернётся в сцене. Убедитесь, что у них есть скрипт «DestructableComponent» и выбран тег «CanBeDestroyedInitially». - Разместите префаб «_barrier_ai_04x04m» на стене там, где будет приближаться осадная башня. Дайте барьеру уникальный тег, например «tower_barrier_lvl3». Теперь вставьте этот тег в параметр «BarrierTagToRemove» в скрипте SiegeTowerSpawner. Помеченный барьер будет удалён, как только откроется рампа осадной башни.
- Связанные префабы
- Siege_tower_5m_spawner
- Siege_tower_9m_spawner
- siege_tower_12m_spawner
Таран
Таран — это префаб, который поддерживает ситуацию, когда осаждающие строят таран во время кампании. Таран будет связан с тегом стороны и будет наносить урон внешним воротам, как только он достигнет ворот и войска начнут раскачивать таран.
- Постройте путь с помощью инструмента путей. Индикатор столкновения на сущности-призраке префаба тарана должен соприкасаться с воротами, чтобы соответствовать анимациям и визуальным эффектам.

- Скрипт BatteringRamSpawner
- Введите тег стороны (Side Tag).
- GateTag: outer_gate
- Введите название пути в скрипт.
- После того как таран подключён к своему пути, разместите точку развёртывания в начале пути, в связи с тараном.
- Связанные префабы
- Batteringram_a_spawner
Заполнители рва
Если сцена имеет рвы и ров вокруг замка, у нас есть система заполнителей рва, которая позволяет осадным башням и таранам работать правильно. Заполнители рва будут появляться, если игрок развернёт связанные осадные орудия. Нам нужно будет организовать и промаркировать различные грани навигационной сетки, чтобы ИИ мог правильно прокладывать путь вокруг заполнителя рва.
- После размещения подходящей сущности для заполнения рва соберите все их под одной родительской сущностью.
- Добавьте тег «ditch_filler» и соответствующий тег стороны (левая, правая или средняя) к связанному осадному орудию.
- Как только осадная башня или таран развёрнуты, заполнитель рва также будет развёрнут вместе с ними.
- Мы манипулируем навигационной сеткой подобно тому, как это делается для проломов в стенах.
- Идентификаторы навигационной сетки находятся в скриптах осадной башни и тарана.
- Введите идентификаторы навигационной сетки, которые вы будете использовать для этого заполнителя рва.
- Пересоздайте и промаркируйте навигационную сетку соответствующим образом.
- Убедитесь, что новые грани навигационной сетки имеют правильные уровни.
| Скрипт SiegeTowerSpawner | Заполнитель рва |
|---|---|
![]() |
![]() |
- В этом примере, когда нет заполнителя рва, 423, 426 и 424 будут деактивированы. 422 и 433 останутся соединёнными, 427 будет активен, 432 и 425 будут соединены.
- Когда есть заполнитель рва, 422 отсоединится от 433 и соединится с 423, 426 будет активен, 425 отсоединится от 432 и соединится с 424, а 427 будет деактивирован.
Осадные лестницы
Осадные лестницы по умолчанию развёртываются на обеих осаждаемых стенах, если только не присутствует осадная башня или пролом.
- Выберите правильный размер спавнера лестницы, никогда не изменяйте высоту спавнеров лестницы.
- Скрипт SiegeLadderSpawner
- Введите целевой сегмент стены (target wall segment). Это тег, который мы добавили к стене, имеющей позиции middle и wait. Лестница будет искать этот тег, а затем искать его дочерние сущности, чтобы направлять войска ИИ соответствующим образом.
- Введите идентификатор навигационной сетки, который вы будете использовать.
- Введите SideTag.
- Теги «merlon_solid_left» или «merlon_solid_right» необходимо добавить к обоим зубцам лестницы в соответствии с правым или левым положением стен. Эти теги добавляются для того, чтобы помеченные зубцы не ломались и не вызывали проблем с физикой при движении войск ИИ.
- Пересоздайте и промаркируйте навигационную сетку соответствующим образом.
- Грань навигационной сетки на осадной лестнице должна быть однонаправленной в сторону стены.

- Отрегулируйте позиции стояния и держателя вил, используя «UpperStateRotationDegree» и «DownStateRotationDegree», чтобы соответствовать местности и стенам.
- Разместите префаб «_barrier_ai_04x04m» на стене там, где приземлится лестница. Дайте барьеру уникальный тег, например «left_ladder_barrier_a». Теперь вставьте этот тег в параметр «BarrierTagToRemove» лестницы. Помеченный барьер будет удалён, как только осадная лестница будет поднята к стенам.
- Связанные префабы
- Siege_ladder_6m_spawner
- Siege_ladder_7m_spawner
- Siege_ladder_8m_spawner
- Siege_ladder_11m_spawner
- Siege_ladder_14m_spawner
Позиции лучников
Позиции лучников — это места направления ИИ, с помощью которых дизайнеры сцен могут определять места, откуда лучники могут стрелять. Существует 2 типа позиций лучников.
- Большие позиции лучников
- Позиции, используемые формированиями лучников.
- С названиями префабов «defender_archer_position» и «attacker_archer_position».
- Они имеют теги «archer_position» и «archer_position_attacker».
- Малые позиции лучников
- Позиции, используемые отдельными агентами-лучниками.
- С названиями префабов «strategic_archer_point» и «strategic_attacker_archer_position».
- Они имеют скрипт «strategicarea». У скрипта есть переменные для:
- Стороны атакующего или защитника.
- Радиуса (большая позиция лучника должна быть в их радиусе, чтобы они использовались). Внутри этого радиуса должна быть большая позиция лучника, чтобы малая позиция лучника была активна. Радиус по умолчанию составляет 40 м для защитника и 60 м для атакующего.
- Глубины и ширины: оба параметра представляют размер области, используемой войсками. 1x1 подходит для одного бойца в области 1м x 1м. 4x2 подходит для 8 бойцов в области 4м x 2м.
- Связанные префабы
- Defender_archer_position
- Attacker_archer_position
- Strategic_archer_point
- strategic_attacker_archer_position
Границы развёртывания
Мы размещаем сущности границ в сцене, чтобы указать, где атакующие и защитники могут разворачивать свои войска. Они работают примерно как мягкие границы.
- Все сущности границ должны иметь эти 3 тега:
- walk_area_vertex
- defender или attacker
- deployment_castleboundary[вставьте номер]
- Теги deployment_castleboundary[вставьте номер] с одинаковым номером в [вставьте номер] соединены друг с другом, чтобы создать выпуклую область. Например, 5 сущностей с тегом deployment_castle_boundary_3 создадут пятиугольник, определяя область границы.
- Вы можете использовать префабы «attacker_boundry», «defender_boundry» и редактировать их по своему усмотрению.
- Если вы добавите тег «out» к одному из этих наборов границ, он будет действовать как отрицательное пространство, вычитаясь из зоны развёртывания, а не добавляясь к ней. С помощью этого метода можно создавать вогнутые зоны развёртывания.
- Связанные префабы
- Attacker_boundry
- Defender_boundry
Камера
Положение и угол камеры определяют точку обзора, которая будет использоваться во время фазы развёртывания.
- Создайте пустую сущность.
- Камера для атакующего должна иметь тег «strategycameraattacker».
- Камера для защитника должна иметь тег «strategycameradefender».
- Убедитесь, что позиции камеры находятся внутри границ развёртывания.
Точки появления
Точки появления (spawn points) — это места, где войска NPC и игрок будут появляться в сцене в начале сражения.
- Используйте стандартный префаб «sp_battle_set» для появления войск и подкреплений. Префаб включает 16 сущностей для каждого типа войск, атакующих и защитников, начальных или подкрепления. Обычное появление обозначает место появления в начале сражения, а подкрепления определяют, где будут появляться подкрепления.
- Убедитесь, что установлена правильная видимость уровня (level visibility), поскольку другой префаб «sp_battle_set» используется в гражданском уровне для миссий боя в общей зоне.
Линии бегства
Существуют линии бегства как для атакующих, так и для защитников. Если они размещены в сценах осады, ИИ должен предпочитать убегать по линиям бегства, а не к ближайшему краю мягкой границы.
- Защитники должны бежать в донжон (keep).
- Чтобы быть активными, линии бегства должны быть покрыты навигационной сеткой.
- Связанные префабы
- Flee_line_attacker
- Flee_line_defender
Скрипт тактической позиции
Скрипт [tacticalposition] позволяет нам изменять ширину различных позиций ИИ.
- После добавления к сущности вы можете изменить множество параметров внутри него. Для целей осады важен только _width. Введённое здесь значение равно ширине формирования в метрах.
- Вы можете использовать этот скрипт в [wait_pos], [middle_pos], [attacker_wait_pos], позициях лучников и позициях ожидания осадных лестниц.
| Тактическая позиция | Развёртывание |
|---|---|
![]() |
![]() |
Барьер ИИ
Барьер ИИ следует добавлять во всех местах, где войска ИИ могут упасть с недопустимой высоты.
- С помощью инструмента путей сначала нарисуйте линию пути, затем отметьте флажок «Enable Barrier Build». После того как барьер построен, нажмите «Go to entity» и проверьте скрипты префаба. Следующие параметры скрипта «barrier_builder» должны быть проверены:
- AI Limiter
- Agent Only
- При необходимости можно включить Flip в соответствии со стороной стены.
Куча метательных камней
Мы можем размещать используемые кучи камней в сценах осады.
- Префаб [throwable_rock_pile] имеет три компонента:
- Stone pile (куча камней): с 8 интерактивными точками для того, чтобы ИИ подбирал камни.
- throw_pos: место, куда агент переместится, чтобы бросить камень.
- volume_box: обозначает область, в которую ИИ может бросить камень.
- Когда вражеский ИИ входит в volume_box, префаб вызовет агента, этот агент подберёт камень и попытается бросить его во врага в volume_box, которого он может выбрать целью.
- Вы можете иметь несколько throw_pos на один volume_box. Просто продублируйте сущность throw_pos.
- Вы соединяете сущности throw_pos с volume_box, добавляя тег к volume_box и вводя это имя тега в скрипт throw_pos.

Использование куч метательных камней и позиций лучников (и почти всего остального) под целыми и разрушенными стенами
- throwable_rock_pile и позиции лучников работают, когда они являются дочерними сущностями.
- Поэтому вы можете отдельно размещать эти сущности, а также любые другие сущности, которые вы хотите, под целыми или разрушенными стенами в качестве дочерних сущностей. Таким образом вы можете создать позиции лучников, покрывающие пролом, или использовать целую стену, когда пролома нет.
| Пример целых стен | Пример разрушенных стен |
|---|---|
![]() |
![]() |
Зубцы и другие разрушаемые компоненты
В зависимости от HP стены поселения мы создаём проломы в стенах, но также разрушаем некоторые сущности, содержащие скрипт destructable_component. Эта функция была задумана для зубцов (мерлонов), но она не проверяет конкретно зубцы, а скорее сам скрипт.
- В скрипте «destructable_component» присутствует параметр «CanBeDestroyedInnıtially». Если он отмечен, у этой сущности есть шанс быть разрушенной в начале миссии, в зависимости от очков прочности замка (которые снижаются во время осадной прогрессии на карте кампании).
- По умолчанию он включён для зубцов и выключен практически для всего остального. Если вы создаёте какие-либо специфичные для сцены разрушаемые сущности, обязательно правильно настройте указанный параметр.








