Методичка: создание юнита
Как создавать боевого юнита — любую сущность, которая стоит на арене и участвует в симуляции. Две конкретные разновидности вынесены в саб-методички:
- Юнит: мементо — играбельные юниты игрока.
- Юнит: противник — PVE-враги.
Этот док — общая часть: что есть у любого юнита независимо от стороны, и на что смотреть, прежде чем уходить в специфику.
1. Что такое юнит
Юнит — это стат-блок + базовая атака + (опц.) навыки + AI + теги. На поле у него непрерывная 2D-позиция, он детерминированно тикает в симуляции (30 Гц), а «думает» его мозг (AI) с каденсом 10 Гц. Юнит не несёт своей визуальной модели в данных — визуал цельный на ассет.
Разница «мементо vs противник» — не в движке (юнит один и тот же), а в роли в игре: мементо — это кит под «Сосуда»-пилота с прокачкой и синергиями; противник — задача во встрече, часто проще и без ресурса/навыков.
2. Общие оси (задаются любому юниту)
| Ось | Что решает | Канон |
|---|---|---|
| Позиция | Фронт / Вторая линия / Фланг | tag-reference |
| Дальность / доставка АА | Ближний / Снаряд / Луч / Мгновенно / Нет АА | stats |
| Боевой класс | Танк / Брузер / Убийца / РДД / Поддержка / Призыватель. Задаёт базу HP и скорости; из него авто-выводится тег оси Role | stats |
| Школа урона | Физическая (Дробящий/Режущий/Колющий) · Магическая (Огонь/Лёд/Молния/Аркана) · Чистый (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) заложены - Дальше — саб-методичка: мементо или противник