Что нового в V2 · Новый интерфейс, Crew, Blueprint в C++, мультиплеерные тесты и обновления прямо в редакторе Читать список изменений → The V2 giveaway winners are in · 10 accounts won 50M AI tokens each See the winners →
Продвинутое

PaperZD

Создавай 2D-анимацию персонажей в PaperZD просто по запросу: флипбуки из спрайт-листа, источники анимации, Animation Blueprint, машины состояний, играбельные персонажи и проверка в игре.

PaperZD от Critical Failure Studio это система анимации, которую используют большинство игр на Paper2D: графы анимации и машины состояний для персонажей из флипбуков. Она бесплатна на Fab и на GitHub.

С расширением PaperZD Ultimate Engine CoPilot собирает такие настройки за тебя: от спрайт-листа до персонажа, который ходит и атакует в игре.

Оно протестировано с PaperZD 2.2.4 на Unreal Engine 5.7.


Что нужно

  • PaperZD, установленный и включённый в твоём проекте. Он использует собственный плагин Unreal Paper2D, который PaperZD включает вместе с собой.
  • Спрайт-лист твоего персонажа или готовые флипбуки.

А также Ultimate Engine CoPilot с включённым расширением PaperZD.

Без PaperZD расширение ничего не ломает. Каждый инструмент PaperZD отвечает одним сообщением, в котором сказано, установлен ли плагин, включён ли он и загружен ли, и что делать дальше.


Настройка

  1. Установи PaperZD с Fab или с GitHub и включи его в своём проекте. Перезапусти редактор, если Unreal попросит.
  2. В CoPilot открой Настройки > Расширения и включи PaperZD. По умолчанию оно выключено.
  3. Попроси ИИ проверить статус PaperZD. Он сообщит, найден ли PaperZD, а если нет, чего не хватает.

О чём можно попросить

  • «Вот спрайт-лист моего рыцаря, 6 столбцов на 13 строк. Сделай флипбуки idle, walk и attack в четырёх направлениях и настрой для него PaperZD.»
  • «Добавь машину состояний с Idle, Walk и Attack. Walk, когда персонаж движется, назад в Idle, когда он останавливается, а Attack проигрывается один раз и возвращается в Idle.»
  • «Сделай так, чтобы анимации смотрели в ту сторону, куда движется персонаж.»
  • «Сделай играбельного персонажа с WASD для движения и Space для атаки, с камерой за спиной и game mode, который его спавнит.»
  • «Добавь звук шагов к анимации walk.»
  • «Переключи персонажа на красную палитру, пока игра запущена.»

За этими запросами ИИ может:

  • Нарезать спрайт-лист на анимации. Один вызов превращает лист в спрайты, флипбуки, последовательности анимации, источник анимации и Animation Blueprint. Анимации с несколькими направлениями становятся одной многонаправленной последовательностью.
  • Строить граф анимации. Узлы play sequence, state machine, направления, override slot, выбора по bool, числу или enum, random player и cached animation, и соединять их.
  • Строить машины состояний. Состояния, conduit и jump, с переходами, которые срабатывают по переменной, когда текущая анимация заканчивается, всегда или никогда, с приоритетом и необязательной переходной последовательностью.
  • Добавлять notify. Пользовательские события, звуки и эффекты Niagara или частиц на временной шкале, а пользовательские notify становятся функциями, которые ты можешь заполнить.
  • Добавлять скины. Заменяющие флипбуки для каждой анимации, для нарядов или смены палитры, применяемые во время игры.
  • Создавать персонажей. Нового персонажа PaperZD, управляемого Animation Blueprint, или подключать существующего актора. Ещё он может добавить дорожку PaperZD в Level Sequence.
  • Проверять в игре. Читать, какая последовательность проигрывается, как далеко она продвинулась и значения переменных анимации, а также запускать, останавливать анимацию или переходить к ней, чтобы вручную проверить переход.

Ошибки, которых он избегает

У PaperZD есть несколько ловушек: они компилируются без ошибок и всё равно ничего не делают. ИИ их знает:

  • Правило нового перехода это «never», пока его не задали, поэтому персонаж никогда не вышел бы из Idle.
  • Переменную, которую читает правило, нужно где-то записывать, обычно в tick Animation Blueprint. Чистая компиляция не доказывает, что правило вообще меняется, поэтому ИИ проверяет в игре.
  • Последовательность играет только в Animation Blueprint своего же источника анимации, поэтому он держит ассеты каждого персонажа вместе.
  • Состояния и переходы компилируются одним пакетом в конце группы правок, а не после каждой.
  • Сетка спрайт-листа читается слева направо, начиная сверху, поэтому ИИ считает ячейки так же, как PaperZD.

Советы и приёмы

Они взяты из создания небольшой играбельной деревни с PaperZD и CoPilot: герой, селянин, скелеты-враги и бродячие волки. Протестировано с PaperZD 2.2.4 на Unreal Engine 5.7.

Три самых важных:

  1. Расскажи ИИ реальную раскладку строк твоего листа. Нумеруй строки с 0, скажи, какие строки являются анимациями, а какая строка это что-то другое, и открой первый кадр каждого флипбука, чтобы проверить.
  2. Никогда не вращай актора. Флипбук это плоская карточка, поэтому направление должно определяться тем, какая анимация играет, а не поворотом актора.
  3. Не доверяй чистой компиляции. Попроси тест в игре, который сообщает текущую анимацию и её переменные.

Опиши лист точно

ИИ не видит, какая строка твоего листа содержит какую анимацию. Тебе придётся сказать об этом.

  • Лист, экспортированный из PixelLab, имеет 6 столбцов и 13 строк ячеек по 92 пикселя, с четырьмя направлениями в каждой анимации в порядке юг, запад, восток, север. Строка 0 это строка поз поворота, а не анимация.
  • Экспорт идёт с файлом раскладки, где указано, какая строка содержит какую анимацию. Пользуйся им. Порядок отличается от персонажа к персонажу: в деревне у героя и мага первым шёл walk, у скелета первым шёл attack, а у волка первым шёл idle.
  • Считай с 0 и назови строку поворота. В одной сессии в промпте было написано «строки с 1 по 4 это walk». ИИ посчитал с 1, поэтому каждая анимация сдвинулась на одну строку, и герой смотрел не в ту сторону.

Записывай строки так:

Каждый лист состоит из 6 столбцов на 13 строк ячеек по 92 пикселя. Нумеруй строки с 0. Строка 0 это строка поворота, пропусти её. Строки с 1 по 4 это walk (юг, запад, восток, север, 6 кадров), строки с 5 по 8 attack, строки с 9 по 12 idle (4 кадра).

Важные настройки

  • Пиксель-арт включён. Текстуры используют фильтрацию nearest и не имеют mip, чтобы пиксели оставались чёткими.
  • Пивот внизу по центру. Ноги остаются в одной и той же точке в каждом кадре.
  • Кадры в секунду. Попроси нужные скорости. ИИ поставил 15 для всего, и 4-кадровый idle зациклился примерно за четверть секунды. Idle 6, walk 12 и attack 14 выглядели правильно.
  • Порядок направлений. Многонаправленная последовательность идёт по часовой стрелке от верха: север, восток, юг, запад.
  • Значения на размещённом акторе главнее. Кулдаун или скорость, заданные на акторе в уровне, перекрывают значение по умолчанию из Blueprint, поэтому проверяй размещённые копии, когда изменение, кажется, ничего не делает.

Держи спрайт лицом к камере

Именно эта настройка перестала поворачивать спрайт, наклонять его и ставить ребром:

  • Выключи вращение актора. Controller yaw выключен, orient rotation to movement выключен, controller desired rotation выключен. Если оставить включёнными, карточка поворачивается вместе с актором и может встать ребром.
  • Спавни с yaw 0. Yaw спавна 180 заставляет карточку отклоняться от камеры, закреплённой в мире.
  • Закрепи spring arm за миром. Pawn control rotation выключен, inherit pitch, yaw и roll выключены, collision test выключен. Сработали pitch -40 и yaw -90.
  • Наклони карточку один раз. При камере, смотрящей вниз под 40 градусов, задай спрайту roll -40 и подними его так, чтобы ноги касались пола.
  • Двигайся по осям мира, а не вдоль вектора forward или right актора.
  • Показывай направление через Set Directionality. Подай в него переменную Vector2D с именем Facing. Записывай Facing каждый тик по скорости и сохраняй последнее значение, когда персонаж останавливается.

С такой камерой клавиши соотносятся так:

  • D двигает по +X, Facing (1, 0).
  • W двигает по -Y, Facing (0, 1).
  • A двигает по -X, Facing (-1, 0).
  • S двигает по +Y, Facing (0, -1).

Если лево и право или верх и низ оказались перепутаны, поменяй знак этой части Facing. Не вращай актора, чтобы это компенсировать.

Проверяй в игре

  • Переход ничего не делает, пока его правило не может измениться. Новое правило это «never», а правилу, которое читает переменную, нужно что-то, что эту переменную записывает, обычно tick Animation Blueprint. Попроси тест в игре, который сообщает текущую анимацию.
  • Задай Facing начальное значение. Оно записывается только пока персонаж движется, поэтому атака до первого шага читает ноль. Значение по умолчанию «юг» решает это.
  • Пусть герой смотрит на цель. Если атака должна попасть во что-то сбоку, попроси ИИ задать Facing в сторону ближайшего врага перед ударом.

Реальная сессия

Клип для коллаборации был собран за четыре промпта в чате CoPilot с агентом Claude Code. ИИ сам запускал тесты в игре и исправлял найденное. Время указано для одной машины.

  1. Два импортированных персонажа с машинами состояний idle, walk и attack: около 2,5 минуты.
  2. Играбельный герой (WASD для движения, Space для атаки), камера со spring arm, game mode и селянин, ходящий между тремя точками: около 7 минут.
  3. Скелет-враг, который преследует и атакует, очки здоровья и счётчик здоровья на экране: около 7 минут.
  4. Бродячие волки, собираемые травы и счётчик трав: около 7 минут.

Внешний вид это отдельная работа

ИИ создаёт анимацию и геймплей. Внешний вид клипа настраивался в уровне, а не ИИ:

  • Тёплый солнечный свет и свет фонарей.
  • Bloom, виньетка и малая глубина резкости для эффекта tilt-shift.
  • Unlit эмиссивный материал на персонажах.

Начни с unlit материала и фиксированной экспозиции. Подбор экспозиции на глаз за много раундов стоил больше времени, чем дал.

Ограничения

  • ИИ не знает, какую анимацию содержит каждая строка твоего листа. Тебе придётся сказать об этом.
  • Враги идут прямо на героя, без поиска пути в обход предметов.
  • Ровно под углом 45 градусов две оси равны, и анимация выбирает восток.
  • Здоровье останавливается на 0. Больше ничего не происходит, пока ты не попросишь смерть.
  • Он не смог прочитать состояние анимации посреди удержания нажатой клавиши и сказал об этом, вместо того чтобы гадать.

Разрешения

Чтение бесплатно: просмотр ассета, графа или работающей анимации никогда не спрашивает разрешения. Изменения следуют твоей настройке Ask Before Edit или Auto Edit, так же как и любой другой инструмент.


Как это работает

  • Плагины не связаны. Расширение обращается к PaperZD только через рефлексию, поэтому Ultimate Engine CoPilot собирается и работает одинаково с установленным PaperZD и без него, а расширение продолжает работать с версиями PaperZD того же устройства. Если обновление что-то переименует, инструмент назовёт недостающее поле, а не будет гадать.
  • Везде сразу. Инструменты работают в чате CoPilot, во внешних MCP-клиентах, таких как Claude Code и Cursor, и в агентах для программирования. См. Интеграция MCP.
  • 39 инструментов. Инструменты создания, просмотра и инструменты времени игры для источников, последовательностей, notify, скинов, Animation Blueprint, графов, машин состояний, персонажей и Sequencer.

Как работают расширения, смотри в разделе Расширения, а как ИИ проверяет запущенную игру, читай в разделе Игровое тестирование.