PaperZD
Crea animación de personajes 2D en PaperZD con solo pedirlo: flipbooks a partir de una hoja de sprites, fuentes de animación, Animation Blueprints, máquinas de estados, personajes jugables y una comprobación en juego.
PaperZD, de Critical Failure Studio, es el sistema de animación que usan la mayoría de los juegos de Paper2D: grafos de animación y máquinas de estados para personajes hechos con flipbooks. Es gratuito en Fab y en GitHub.
Con la extensión PaperZD, Ultimate Engine CoPilot construye esos montajes por ti, desde una hoja de sprites hasta un personaje que camina y ataca en el juego.
Se probó con PaperZD 2.2.4 en Unreal Engine 5.7.
Qué necesitas
- PaperZD, instalado y activado en tu proyecto. Usa el plugin Paper2D del propio Unreal, que PaperZD activa con él.
- Una hoja de sprites para tu personaje, o flipbooks ya existentes.
Además de Ultimate Engine CoPilot con la extensión PaperZD activada.
Sin PaperZD, la extensión no hace nada perjudicial. Cada herramienta de PaperZD responde con un único mensaje que dice si el plugin está instalado, activado y cargado, y qué hacer a continuación.
Configuración
- Instala PaperZD desde Fab o GitHub y actívalo en tu proyecto. Reinicia el editor si Unreal lo pide.
- En el CoPilot, abre Configuración > Extensiones y activa PaperZD. Está desactivada por defecto.
- Pide a la IA que compruebe el estado de PaperZD. Te dice si encontró PaperZD y, si no, qué falta.
Qué puedes pedir
- “Aquí está mi hoja de sprites del caballero, 6 columnas por 13 filas. Haz flipbooks de idle, caminar y ataque en cuatro direcciones y configura PaperZD para ello.”
- “Añade una máquina de estados con Idle, Walk y Attack. Walk cuando el personaje se mueve, de vuelta a Idle cuando se detiene, y Attack se reproduce una vez y vuelve a Idle.”
- “Haz que las animaciones miren hacia donde se mueve el personaje.”
- “Haz un personaje jugable con WASD para moverse y Space para atacar, con una cámara detrás y un game mode que lo haga aparecer.”
- “Añade un sonido de pasos a la animación de caminar.”
- “Cambia el personaje a la paleta roja mientras el juego se está ejecutando.”
Detrás de esas peticiones, la IA puede:
- Cortar una hoja de sprites en animaciones. Una sola llamada convierte una hoja en sprites, flipbooks, secuencias de animación, una fuente de animación y un Animation Blueprint. Las animaciones con varias direcciones se convierten en una única secuencia multidireccional.
- Construir el grafo de animación. Nodos de reproducir secuencia, máquina de estados, dirección, ranura de override, selección por bool, número o enum, reproductor aleatorio y animación en caché, y conectarlos.
- Construir máquinas de estados. Estados, conduits y saltos, con transiciones que se disparan por una variable, cuando termina la animación actual, siempre o nunca, con una prioridad y una secuencia de transición opcional.
- Añadir notifies. Eventos personalizados, sonidos y efectos de Niagara o de partículas en una línea de tiempo, y los notifies personalizados se convierten en funciones que puedes rellenar.
- Añadir skins. Flipbooks de reemplazo por animación, para atuendos o cambios de paleta, aplicados mientras el juego se ejecuta.
- Crear personajes. Un personaje PaperZD nuevo gobernado por el Animation Blueprint, o conectar un actor existente. También puede añadir una pista de PaperZD a una Level Sequence.
- Comprobarlo en juego. Leer qué secuencia se está reproduciendo, cuánto lleva y los valores de las variables de animación, y reproducir, detener o saltar a una animación para probar una transición a mano.
Errores que evita
PaperZD tiene algunas trampas que compilan limpiamente y aun así no hacen nada. La IA las conoce:
- La regla de una transición nueva es “nunca” hasta que se establece, así que el personaje nunca saldría de Idle.
- Una variable que lee una regla tiene que escribirse en algún sitio, normalmente en el tick del Animation Blueprint. Una compilación limpia no demuestra que la regla llegue a cambiar, así que la IA lo comprueba en juego.
- Una secuencia solo se reproduce en un Animation Blueprint de su propia fuente de animación, así que mantiene juntos los assets de cada personaje.
- Los estados y las transiciones se compilan en un solo lote al final de un grupo de ediciones, no después de cada una.
- La cuadrícula de la hoja de sprites se lee de izquierda a derecha desde arriba, así que la IA cuenta las celdas igual que PaperZD.
Trucos y consejos
Salen de construir con PaperZD y el CoPilot un pequeño pueblo jugable: un héroe, un aldeano, enemigos esqueleto y lobos errantes. Se probó con PaperZD 2.2.4 en Unreal Engine 5.7.
Los tres que más importan:
- Dile a la IA la disposición real de filas de tu hoja. Numera las filas desde 0, indica qué filas son animaciones y cuál es otra cosa, y abre el primer fotograma de cada flipbook para comprobarlo.
- No rotes nunca el actor. Un flipbook es una tarjeta plana, así que la dirección tiene que venir de qué animación se reproduce, no de girar el actor.
- No te fíes de una compilación limpia. Pide una prueba de juego que informe de la animación actual y sus variables.
Describe la hoja con exactitud
La IA no puede ver qué fila de tu hoja contiene qué animación. Tienes que decírselo.
- Una hoja exportada desde PixelLab tiene 6 columnas y 13 filas de celdas de 92 píxeles, con cuatro direcciones en cada animación en el orden sur, oeste, este, norte. La fila 0 es una fila de poses de rotación, no una animación.
- La exportación incluye un archivo de disposición que indica qué fila contiene qué animación. Úsalo. El orden cambia de un personaje a otro: en el pueblo, el héroe y el mago tenían caminar primero, el esqueleto ataque primero y el lobo idle primero.
- Cuenta desde 0 y nombra la fila de rotación. En una sesión el prompt decía “las filas 1 a 4 son caminar”. La IA contó desde 1, así que todas las animaciones quedaron una fila desplazadas y el héroe miraba en la dirección equivocada.
Escribe las filas así:
Cada hoja tiene 6 columnas por 13 filas de celdas de 92 píxeles. Numera las filas desde 0. La fila 0 es la fila de rotación, sáltala. Las filas 1 a 4 son caminar (sur, oeste, este, norte, 6 fotogramas), las filas 5 a 8 el ataque, las filas 9 a 12 el idle (4 fotogramas).
Ajustes que importan
- Pixel art activado. Las texturas usan filtrado nearest y sin mips, para que los píxeles se mantengan nítidos.
- Pivote abajo en el centro. Los pies se quedan en el mismo punto en todos los fotogramas.
- Fotogramas por segundo. Pide las velocidades que quieras. La IA usó 15 para todo, lo que repetía un idle de 4 fotogramas en aproximadamente un cuarto de segundo. Idle 6, caminar 12 y ataque 14 se veían bien.
- Orden de las direcciones. Una secuencia multidireccional va en sentido horario desde arriba: norte, este, sur, oeste.
- Los valores de un actor colocado ganan. Un cooldown o una velocidad fijados en un actor del nivel prevalecen sobre el valor por defecto del Blueprint, así que revisa las copias colocadas cuando un cambio parezca no hacer nada.
Mantén el sprite de cara a la cámara
Esta es la configuración que impidió que el sprite girara, se inclinara o quedara de canto:
- Desactiva la rotación del actor. Controller yaw desactivado, orient rotation to movement desactivado, controller desired rotation desactivado. Si se dejan activados, la tarjeta gira con el actor y puede quedar de canto.
- Haz aparecer con yaw 0. Un yaw de aparición de 180 hace que la tarjeta se incline alejándose de una cámara fija en el mundo.
- Fija el spring arm al mundo. Pawn control rotation desactivado, heredar pitch, yaw y roll desactivado, prueba de colisión desactivada. Un pitch de -40 y un yaw de -90 funcionaron.
- Inclina la tarjeta una sola vez. Con la cámara mirando 40 grados hacia abajo, da al sprite un roll de -40 y súbelo para que los pies toquen el suelo.
- Muévete en ejes del mundo, no a lo largo del vector adelante o derecha del actor.
- Muestra la dirección con Set Directionality. Aliméntalo con una variable Vector2D llamada Facing. Escribe Facing en cada tick a partir de la velocidad y conserva el último valor cuando el personaje se detiene.
Con esa cámara, las teclas se asignan así:
- D mueve a lo largo de +X, Facing (1, 0).
- W mueve a lo largo de -Y, Facing (0, 1).
- A mueve a lo largo de -X, Facing (-1, 0).
- S mueve a lo largo de +Y, Facing (0, -1).
Si izquierda y derecha, o arriba y abajo, salen intercambiados, invierte el signo de esa parte de Facing. No rotes el actor para compensarlo.
Pruébalo en juego
- Una transición no hace nada hasta que su regla puede cambiar. Una regla nueva es “nunca”, y una regla que lee una variable necesita algo que escriba esa variable, normalmente el tick del Animation Blueprint. Pide una prueba de juego que informe de la animación actual.
- Dale a Facing un valor inicial. Solo se escribe mientras el personaje se mueve, así que un ataque antes del primer paso lee cero. Un valor por defecto de sur lo arregla.
- Haz que el héroe mire al objetivo. Si el ataque debe golpear algo situado a un lado, pide a la IA que ponga Facing hacia el enemigo más cercano antes del golpe.
Una sesión real
El clip de colaboración se construyó en cuatro prompts en el chat del CoPilot, con el agente Claude Code. La IA ejecutó sus propias pruebas de juego y reparó lo que encontró. Los tiempos son de una sola máquina.
- Dos personajes importados, con máquinas de estados de idle, caminar y ataque: unos 2,5 minutos.
- Un héroe jugable (WASD para moverse, Space para atacar), una cámara con spring arm, un game mode y un aldeano que camina entre tres puntos: unos 7 minutos.
- Un enemigo esqueleto que persigue y ataca, puntos de vida y un contador de salud en pantalla: unos 7 minutos.
- Lobos errantes, hierbas recolectables y un contador de hierbas: unos 7 minutos.
El aspecto es un trabajo aparte
La IA construye la animación y la jugabilidad. El aspecto del clip se montó en el nivel, no lo hizo la IA:
- Luz cálida de sol y de farolas.
- Bloom, una viñeta y una profundidad de campo reducida para un efecto tilt-shift.
- Un material emisivo sin iluminación en los personajes.
Empieza con el material sin iluminación y una exposición fija. Ajustar la exposición a ojo durante muchas rondas costó más tiempo del que devolvió.
Límites
- La IA no sabe qué animación contiene cada fila de tu hoja. Tienes que decírselo.
- Los enemigos van en línea recta hacia el héroe, sin búsqueda de caminos alrededor de los objetos.
- En un ángulo exacto de 45 grados dos ejes empatan y la animación elige este.
- La salud se detiene en 0. No pasa nada más hasta que pidas una muerte.
- No pudo leer un estado de animación en mitad de una pulsación de tecla mantenida, y lo dijo en lugar de adivinar.
Permisos
Leer es gratis: inspeccionar un asset, un grafo o una animación en ejecución nunca pregunta. Los cambios siguen tu ajuste Ask Before Edit o Auto Edit, igual que cualquier otra herramienta.
Cómo funciona
- Sin enlace entre los plugins. La extensión llega a PaperZD solo por reflexión, así que Ultimate Engine CoPilot compila y funciona igual con o sin PaperZD instalado, y la extensión sigue funcionando entre versiones de PaperZD con el mismo diseño. Si una actualización renombra algo, la herramienta nombra el campo que falta en lugar de adivinar.
- En todas partes a la vez. Las herramientas funcionan en el chat del CoPilot, en clientes MCP externos como Claude Code y Cursor, y en agentes de programación. Consulta Integración MCP.
- 39 herramientas. Herramientas de creación, inspección y de tiempo de juego para fuentes, secuencias, notifies, skins, Animation Blueprints, grafos, máquinas de estados, personajes y Sequencer.
Consulta Extensiones para saber cómo funcionan las extensiones, y Pruebas de juego para saber cómo comprueba la IA un juego en ejecución.