PaperZD
Crie animação de personagens 2D no PaperZD só pedindo: flipbooks a partir de uma sprite sheet, fontes de animação, Animation Blueprints, máquinas de estados, personagens jogáveis e uma verificação em jogo.
O PaperZD, da Critical Failure Studio, é o sistema de animação que a maioria dos jogos Paper2D usa: grafos de animação e máquinas de estados para personagens feitos de flipbooks. Ele é gratuito na Fab e no GitHub.
Com a extensão PaperZD, o Ultimate Engine CoPilot constrói esses setups para você, de uma sprite sheet até um personagem que anda e ataca no jogo.
Ela foi testada com o PaperZD 2.2.4 na Unreal Engine 5.7.
Do que você precisa
- PaperZD, instalado e ativado no seu projeto. Ele usa o plugin Paper2D da própria Unreal, que o PaperZD ativa junto.
- Uma sprite sheet do seu personagem, ou flipbooks já existentes.
Além do Ultimate Engine CoPilot com a extensão PaperZD ligada.
Sem o PaperZD, a extensão não faz nada prejudicial. Toda ferramenta do PaperZD responde com uma única mensagem que diz se o plugin está instalado, ativado e carregado, e o que fazer a seguir.
Configuração
- Instale o PaperZD pela Fab ou pelo GitHub e ative-o no seu projeto. Reinicie o editor se a Unreal pedir.
- No CoPilot, abra Configurações > Extensões e ligue PaperZD. Ela vem desligada por padrão.
- Peça à IA para verificar o status do PaperZD. Ela informa se o PaperZD foi encontrado e, se não, o que está faltando.
O que você pode pedir
- “Aqui está a sprite sheet do meu cavaleiro, 6 colunas por 13 linhas. Crie flipbooks de idle, walk e attack em quatro direções e configure o PaperZD para ele.”
- “Adicione uma máquina de estados com Idle, Walk e Attack. Walk quando o personagem estiver se movendo, volta para Idle quando ele parar, e Attack toca uma vez e volta para Idle.”
- “Faça as animações olharem para o lado em que o personagem está se movendo.”
- “Crie um personagem jogável com WASD para mover e Space para atacar, com uma câmera atrás dele e um game mode que o spawna.”
- “Adicione um som de passos à animação de walk.”
- “Troque o personagem para a paleta vermelha enquanto o jogo está rodando.”
Por trás desses pedidos, a IA consegue:
- Cortar uma sprite sheet em animações. Uma única chamada transforma uma sheet em sprites, flipbooks, sequências de animação, uma fonte de animação e um Animation Blueprint. Animações com várias direções viram uma única sequência multidirecional.
- Construir o grafo de animação. Nós de play sequence, state machine, direção, override slot, seleção por bool, número ou enum, random player e cached animation, e conectá-los.
- Construir máquinas de estados. Estados, conduits e jumps, com transições que disparam por uma variável, quando a animação atual termina, sempre ou nunca, com uma prioridade e uma sequência de transição opcional.
- Adicionar notifies. Eventos customizados, sons e efeitos Niagara ou de partículas numa linha do tempo, e os notifies customizados viram funções que você pode preencher.
- Adicionar skins. Flipbooks substitutos por animação, para roupas ou trocas de paleta, aplicados enquanto o jogo roda.
- Criar personagens. Um novo personagem PaperZD controlado pelo Animation Blueprint, ou ligar um actor existente a ele. Ela também pode adicionar uma trilha PaperZD a uma Level Sequence.
- Verificar em jogo. Ler qual sequência está tocando, quanto já avançou e os valores das variáveis de animação, e tocar, parar ou pular para uma animação para testar uma transição à mão.
Erros que ela evita
O PaperZD tem algumas armadilhas que compilam sem erro e mesmo assim não fazem nada. A IA as conhece:
- A regra de uma transição nova é “never” até ser definida, então o personagem nunca sairia do Idle.
- Uma variável que uma regra lê precisa ser escrita em algum lugar, normalmente no tick do Animation Blueprint. Uma compilação limpa não prova que a regra chega a mudar, então a IA verifica em jogo.
- Uma sequência só toca num Animation Blueprint da sua própria fonte de animação, então ela mantém os assets de cada personagem juntos.
- Estados e transições são compilados em um único lote no fim de um grupo de edições, não depois de cada uma.
- A grade da sprite sheet é lida da esquerda para a direita, a partir do topo, então a IA conta as células do mesmo jeito que o PaperZD.
Dicas e truques
Elas vêm da construção de uma pequena vila jogável com o PaperZD e o CoPilot: um herói, um aldeão, esqueletos inimigos e lobos errantes. Foi testado com o PaperZD 2.2.4 na Unreal Engine 5.7.
As três que mais importam:
- Diga à IA o layout real das linhas da sua sheet. Numere as linhas a partir de 0, diga quais linhas são animações e qual linha é outra coisa, e abra o primeiro frame de cada flipbook para conferir.
- Nunca gire o actor. Um flipbook é um cartão plano, então a direção precisa vir de qual animação toca, não de girar o actor.
- Não confie numa compilação limpa. Peça um teste em jogo que informe a animação atual e suas variáveis.
Descreva a sheet com exatidão
A IA não consegue ver qual linha da sua sheet guarda qual animação. Você precisa dizer.
- Uma sheet exportada do PixelLab tem 6 colunas e 13 linhas de células de 92 pixels, com quatro direções em cada animação na ordem sul, oeste, leste, norte. A linha 0 é uma linha de poses de rotação, não uma animação.
- A exportação vem com um arquivo de layout que lista qual linha guarda qual animação. Use-o. A ordem muda de personagem para personagem: na vila, o herói e o mago tinham walk primeiro, o esqueleto attack primeiro e o lobo idle primeiro.
- Conte a partir de 0 e nomeie a linha de rotação. Numa sessão, o prompt dizia “as linhas 1 a 4 são o walk”. A IA contou a partir de 1, então toda animação ficou uma linha deslocada e o herói olhava para o lado errado.
Escreva as linhas assim:
Cada sheet tem 6 colunas por 13 linhas de células de 92 pixels. Numere as linhas a partir de 0. A linha 0 é a linha de rotação, ignore-a. As linhas 1 a 4 são o walk (sul, oeste, leste, norte, 6 frames), as linhas 5 a 8 o attack, as linhas 9 a 12 o idle (4 frames).
Configurações que importam
- Pixel art ligado. As texturas usam filtragem nearest e nenhum mip, para os pixels ficarem nítidos.
- Pivô no centro da base. Os pés ficam no mesmo ponto em todos os frames.
- Frames por segundo. Peça as velocidades que você quer. A IA usou 15 para tudo, o que repetia um idle de 4 frames em cerca de um quarto de segundo. Idle 6, walk 12 e attack 14 ficaram bons.
- Ordem das direções. Uma sequência multidirecional gira no sentido horário a partir de cima: norte, leste, sul, oeste.
- Valores num actor colocado valem mais. Um cooldown ou uma velocidade definidos num actor do nível vencem o padrão do Blueprint, então confira as cópias colocadas quando uma mudança parecer não fazer nada.
Mantenha o sprite virado para a câmera
Este é o setup que impediu o sprite de girar, inclinar ou ficar de lado:
- Desligue a rotação do actor. Controller yaw desligado, orient rotation to movement desligado, controller desired rotation desligado. Se ficar ligado, o cartão gira com o actor e pode ficar de lado.
- Faça o spawn com yaw 0. Um yaw de spawn de 180 faz o cartão se inclinar para longe de uma câmera fixa no mundo.
- Fixe o spring arm ao mundo. Pawn control rotation desligado, inherit pitch, yaw e roll desligados, collision test desligado. Um pitch de -40 e um yaw de -90 funcionaram.
- Incline o cartão uma única vez. Com a câmera olhando 40 graus para baixo, dê ao sprite um roll de -40 e levante-o para que os pés toquem o chão.
- Mova-se nos eixos do mundo, não ao longo do vetor forward ou right do actor.
- Mostre a direção com Set Directionality. Alimente-o com uma variável Vector2D chamada Facing. Escreva Facing a cada tick a partir da velocidade e mantenha o último valor quando o personagem parar.
Com essa câmera, as teclas se mapeiam assim:
- D move ao longo de +X, Facing (1, 0).
- W move ao longo de -Y, Facing (0, 1).
- A move ao longo de -X, Facing (-1, 0).
- S move ao longo de +Y, Facing (0, -1).
Se esquerda e direita ou cima e baixo saírem trocados, inverta o sinal dessa parte de Facing. Não gire o actor para compensar.
Teste em jogo
- Uma transição não faz nada até a regra poder mudar. Uma regra nova é “never”, e uma regra que lê uma variável precisa de algo que escreva essa variável, normalmente o tick do Animation Blueprint. Peça um teste em jogo que informe a animação atual.
- Dê a Facing um valor inicial. Ele só é escrito enquanto o personagem se move, então um ataque antes do primeiro passo lê zero. Um padrão de sul resolve.
- Faça o herói olhar para o alvo. Se o ataque deve atingir algo de lado, peça à IA para definir Facing na direção do inimigo mais próximo antes do golpe.
Uma sessão real
O clipe da collab foi construído em quatro prompts no chat do CoPilot, com o agente Claude Code. A IA rodou os próprios testes em jogo e consertou o que encontrou. Os tempos são de uma única máquina.
- Dois personagens importados, com máquinas de estados de idle, walk e attack: cerca de 2,5 minutos.
- Um herói jogável (WASD para mover, Space para atacar), uma câmera com spring arm, um game mode e um aldeão andando entre três pontos: cerca de 7 minutos.
- Um esqueleto inimigo que persegue e ataca, pontos de vida e um contador de vida na tela: cerca de 7 minutos.
- Lobos errantes, ervas coletáveis e um contador de ervas: cerca de 7 minutos.
O visual é um trabalho à parte
A IA constrói a animação e o gameplay. O visual do clipe foi montado no nível, não pela IA:
- Luz quente de sol e de lanterna.
- Bloom, uma vinheta e uma profundidade de campo rasa para um efeito tilt-shift.
- Um material emissivo unlit nos personagens.
Comece com o material unlit e uma exposição fixa. Ajustar a exposição no olho por muitas rodadas custou mais tempo do que rendeu.
Limites
- A IA não sabe qual animação cada linha da sua sheet guarda. Você precisa dizer.
- Os inimigos andam direto até o herói, sem pathfinding em volta dos objetos.
- Num ângulo exato de 45 graus, dois eixos empatam e a animação escolhe leste.
- A vida para em 0. Nada mais acontece até você pedir uma morte.
- Ela não conseguiu ler o estado de uma animação no meio de uma tecla pressionada, e disse isso em vez de adivinhar.
Permissões
Ler é livre: inspecionar um asset, um grafo ou uma animação em execução nunca pergunta. As alterações seguem a sua configuração Ask Before Edit ou Auto Edit, como toda outra ferramenta.
Como funciona
- Nenhum vínculo entre os plugins. A extensão chega ao PaperZD só por reflexão, então o Ultimate Engine CoPilot compila e roda igual com ou sem o PaperZD instalado, e a extensão continua funcionando entre versões do PaperZD com o mesmo design. Se uma atualização renomear algo, a ferramenta nomeia o campo que falta em vez de adivinhar.
- Em todo lugar ao mesmo tempo. As ferramentas funcionam no chat do CoPilot, em clientes MCP externos como Claude Code e Cursor, e em agentes de programação. Veja Integração MCP.
- 39 ferramentas. Ferramentas de criação, inspeção e de tempo de jogo para fontes, sequências, notifies, skins, Animation Blueprints, grafos, máquinas de estados, personagens e Sequencer.
Veja Extensões para entender como as extensões funcionam, e Testes de jogo para ver como a IA verifica um jogo em execução.