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 отвечает одним сообщением, в котором сказано, установлен ли плагин, включён ли он и загружен ли, и что делать дальше.
Настройка
- Установи PaperZD с Fab или с GitHub и включи его в своём проекте. Перезапусти редактор, если Unreal попросит.
- В CoPilot открой Настройки > Расширения и включи PaperZD. По умолчанию оно выключено.
- Попроси ИИ проверить статус 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.
Три самых важных:
- Расскажи ИИ реальную раскладку строк твоего листа. Нумеруй строки с 0, скажи, какие строки являются анимациями, а какая строка это что-то другое, и открой первый кадр каждого флипбука, чтобы проверить.
- Никогда не вращай актора. Флипбук это плоская карточка, поэтому направление должно определяться тем, какая анимация играет, а не поворотом актора.
- Не доверяй чистой компиляции. Попроси тест в игре, который сообщает текущую анимацию и её переменные.
Опиши лист точно
ИИ не видит, какая строка твоего листа содержит какую анимацию. Тебе придётся сказать об этом.
- Лист, экспортированный из 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. ИИ сам запускал тесты в игре и исправлял найденное. Время указано для одной машины.
- Два импортированных персонажа с машинами состояний idle, walk и attack: около 2,5 минуты.
- Играбельный герой (WASD для движения, Space для атаки), камера со spring arm, game mode и селянин, ходящий между тремя точками: около 7 минут.
- Скелет-враг, который преследует и атакует, очки здоровья и счётчик здоровья на экране: около 7 минут.
- Бродячие волки, собираемые травы и счётчик трав: около 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.
Как работают расширения, смотри в разделе Расширения, а как ИИ проверяет запущенную игру, читай в разделе Игровое тестирование.