Методичка: создание юнита

Как создавать боевого юнита — любую сущность, которая стоит на арене и участвует в симуляции. Две конкретные разновидности вынесены в саб-методички:

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


1. Что такое юнит

Юнит — это стат-блок + базовая атака + (опц.) навыки + AI + теги. На поле у него непрерывная 2D-позиция, он детерминированно тикает в симуляции (30 Гц), а «думает» его мозг (AI) с каденсом 10 Гц. Юнит не несёт своей визуальной модели в данных — визуал цельный на ассет.

Разница «мементо vs противник» — не в движке (юнит один и тот же), а в роли в игре: мементо — это кит под «Сосуда»-пилота с прокачкой и синергиями; противник — задача во встрече, часто проще и без ресурса/навыков.


2. Общие оси (задаются любому юниту)

ОсьЧто решаетКанон
ПозицияФронт / Вторая линия / Флангtag-reference
Дальность / доставка ААБлижний / Снаряд / Луч / Мгновенно / Нет ААstats
Боевой классТанк / Брузер / Убийца / РДД / Поддержка / Призыватель. Задаёт базу HP и скорости; из него авто-выводится тег оси Rolestats
Школа уронаФизическая (Дробящий/Режущий/Колющий) · Магическая (Огонь/Лёд/Молния/Аркана) · Чистый (True). Задаётся каждой атаке и способности отдельно, не юниту целикомstats
Сродство (опц.)Яд / Свет / Тьма — «вкус» поверх школы, у каждого своя механикаeffects
Тип существа creature_typeЖивое / Нежить / Конструкт / Демон / Зверь… — редкая специя (иммунитеты/синергии на отдельных юнитах), НЕ главный гейт сродства. Проставлять там, где значим, не дефолтомtag-reference
РесурсНет / Мана / Ярость… (у врагов обычно Нет)stats
Статы30 числовых. База собирается каскадом StatsConfig → Класс → Персона (Мементо/UnitData) → «Сосуд»; у врагов между классом и юнитом — Вид и Подвид. Ассет героя задаёт дельту поверх класса, а не всю базуstats

Школа ≠ сродство ≠ тип существа — три разные оси, не смешивать. Частая ошибка — лепить «тип существа» как источник урона. Тип существа только у цели и работает как редкий модификатор (Конструкт иммунен к Яду и т.п.).


3. AI (общий шов)

Поведение юнита в бою задаётся AI-профилем — набором ручек-блоков (фокус атаки, отступление, условие/цель активки, триггер пассивки, кайт). Словарь блоков и их опции — Модель AI-настроек. Юнит включает свой поднабор блоков; у простого врага это может быть только «фокус» + «отступление».

На горизонте: сейчас AI — фиксированные пресеты (ручки A–G). Блочная композиция (улучшение доклеивает «блок дальник») — запланированный post-festival тех-задел. При дизайне поведения, меняющего роль, помни: блок должен доклеиваться, а не требовать переписи всего профиля.


4. Читаемость (столп «Честность»)

Бой автономен — игрок читает исход, не микрит. Любой юнит обязан за секунду сообщать: кто он, что делает, чем на него отвечать. Это не полиш, а функция (Принцип 4). Если юнит визуально/поведенчески неотличим от соседа — переработать, а не докрашивать.


5. Данные, id, локализация

  • Три слоя: авторинг (ScriptableObject) → симуляция (POCO, бейк) → персистентность (DTO). Ссылки только по строковому id domain.name (стабильный, не переименовывается после релиза).
  • Loc-ключи сразу по конвенции ({id}.name, {id}.desc), RU заполнен, прочие локали — прочерк. Технический канон — дата-слой (код Assets/_Project/Scripts/Data/, правила — скилл xgaida-x-nixi-data-authoring).

6. Общий чеклист (до ухода в специфику)

  • Позиция, дальность, ресурс заданы
  • Школа урона проставлена каждой атаке/способности отдельно
  • creature_type — если значим (иначе не ставить дефолтом)
  • AI-профиль собран из блоков (ai-settings-model); блоки не конфликтуют
  • Юнит читается за секунду (кто/что/чем отвечать)
  • id domain.name + loc-ключи (RU) заложены
  • Дальше — саб-методичка: мементо или противник