Vezi ce e nou în V2 · Interfață reconstruită, Crew, Blueprint în C++, teste multiplayer și actualizări direct în editor Citește lista de modificări → The V2 giveaway winners are in · 10 accounts won 50M AI tokens each See the winners →
Avansat

PaperZD

Construiește animație de personaje 2D în PaperZD doar cerând-o: flipbook-uri dintr-un sprite sheet, surse de animație, Animation Blueprints, mașini de stări, personaje jucabile și o verificare în joc.

PaperZD, de la Critical Failure Studio, este sistemul de animație pe care îl folosesc majoritatea jocurilor Paper2D: grafuri de animație și mașini de stări pentru personaje făcute din flipbook-uri. Este gratuit pe Fab și pe GitHub.

Cu extensia PaperZD, Ultimate Engine CoPilot construiește aceste configurații pentru tine, de la un sprite sheet până la un personaj care merge și atacă în joc.

A fost testată cu PaperZD 2.2.4 pe Unreal Engine 5.7.


De ce ai nevoie

  • PaperZD, instalat și activat în proiectul tău. Folosește plugin-ul Paper2D al Unreal, pe care PaperZD îl activează odată cu el.
  • Un sprite sheet pentru personajul tău sau flipbook-uri deja existente.

Plus Ultimate Engine CoPilot cu extensia PaperZD activată.

Fără PaperZD, extensia nu face nimic dăunător. Fiecare unealtă PaperZD răspunde cu un singur mesaj care spune dacă plugin-ul este instalat, activat și încărcat și ce trebuie făcut în continuare.


Configurare

  1. Instalează PaperZD de pe Fab sau de pe GitHub și activează-l în proiectul tău. Repornește editorul dacă Unreal îți cere.
  2. În CoPilot, deschide Setări > Extensii și activează PaperZD. Este dezactivată implicit.
  3. Cere AI-ului să verifice starea PaperZD. Îți spune dacă PaperZD a fost găsit și, dacă nu, ce lipsește.

Ce poți cere

  • „Iată sprite sheet-ul cavalerului meu, 6 coloane pe 13 rânduri. Fă flipbook-uri pentru idle, walk și attack în patru direcții și configurează PaperZD pentru el.”
  • „Adaugă o mașină de stări cu Idle, Walk și Attack. Walk când personajul se mișcă, înapoi în Idle când se oprește, iar Attack rulează o dată și revine în Idle.”
  • „Fă animațiile să privească în direcția în care se mișcă personajul.”
  • „Fă un personaj jucabil cu WASD pentru mișcare și Space pentru atac, cu o cameră în spatele lui și un game mode care îl face spawn.”
  • „Adaugă un sunet de pași la animația de walk.”
  • „Schimbă personajul pe paleta roșie în timp ce jocul rulează.”

În spatele acestor cereri, AI-ul poate:

  • Să taie un sprite sheet în animații. Un singur apel transformă un sheet în sprite-uri, flipbook-uri, secvențe de animație, o sursă de animație și un Animation Blueprint. Animațiile cu mai multe direcții devin o singură secvență multidirecțională.
  • Să construiască graful de animație. Noduri de play sequence, state machine, direcție, override slot, selecție după bool, număr sau enum, random player și cached animation, și să le conecteze.
  • Să construiască mașini de stări. Stări, conduit-uri și jump-uri, cu tranziții care se declanșează la o variabilă, când se termină animația curentă, întotdeauna sau niciodată, cu o prioritate și o secvență de tranziție opțională.
  • Să adauge notify-uri. Evenimente personalizate, sunete și efecte Niagara sau de particule pe o linie de timp, iar notify-urile personalizate devin funcții pe care le poți completa.
  • Să adauge skin-uri. Flipbook-uri de înlocuire pentru fiecare animație, pentru ținute sau schimbări de paletă, aplicate în timp ce jocul rulează.
  • Să creeze personaje. Un personaj PaperZD nou, condus de Animation Blueprint, sau să conecteze un actor existent. Poate adăuga și o pistă PaperZD într-un Level Sequence.
  • Să verifice în joc. Să citească ce secvență rulează, cât a avansat și valorile variabilelor de animație, și să pornească, să oprească sau să sară la o animație pentru a testa manual o tranziție.

Greșeli pe care le evită

PaperZD are câteva capcane care compilează fără erori și totuși nu fac nimic. AI-ul le cunoaște:

  • Regula unei tranziții noi este „never” până este setată, așa că personajul nu ar ieși niciodată din Idle.
  • O variabilă citită de o regulă trebuie scrisă undeva, de obicei în tick-ul Animation Blueprint. O compilare curată nu dovedește că regula se schimbă vreodată, așa că AI-ul verifică în joc.
  • O secvență rulează doar într-un Animation Blueprint din propria sursă de animație, așa că păstrează împreună asset-urile fiecărui personaj.
  • Stările și tranzițiile sunt compilate într-un singur lot la sfârșitul unui grup de modificări, nu după fiecare.
  • Grila sprite sheet-ului se citește de la stânga la dreapta, începând de sus, așa că AI-ul numără celulele în același fel ca PaperZD.

Sfaturi și trucuri

Provin din construirea unui mic sat jucabil cu PaperZD și CoPilot: un erou, un sătean, scheleți inamici și lupi rătăcitori. A fost testat cu PaperZD 2.2.4 pe Unreal Engine 5.7.

Cele trei care contează cel mai mult:

  1. Spune-i AI-ului aranjarea reală a rândurilor din sheet. Numerotează rândurile de la 0, spune care rânduri sunt animații și care rând este altceva și deschide primul cadru al fiecărui flipbook pentru a verifica.
  2. Nu roti niciodată actorul. Un flipbook este un card plat, așa că direcția trebuie să vină din animația care rulează, nu din rotirea actorului.
  3. Nu te baza pe o compilare curată. Cere un test în joc care raportează animația curentă și variabilele ei.

Descrie sheet-ul exact

AI-ul nu poate vedea ce rând din sheet conține ce animație. Trebuie să i-o spui tu.

  • Un sheet exportat din PixelLab are 6 coloane și 13 rânduri de celule de 92 de pixeli, cu patru direcții în fiecare animație, în ordinea sud, vest, est, nord. Rândul 0 este un rând de poziții de rotație, nu o animație.
  • Exportul vine cu un fișier de aranjare care listează ce rând conține ce animație. Folosește-l. Ordinea diferă de la personaj la personaj: în sat, eroul și magul aveau walk primul, scheletul attack primul, iar lupul idle primul.
  • Numără de la 0 și numește rândul de rotație. Într-o sesiune, prompt-ul spunea „rândurile 1 până la 4 sunt walk”. AI-ul a numărat de la 1, așa că fiecare animație a fost cu un rând mutată, iar eroul privea în direcția greșită.

Scrie rândurile așa:

Fiecare sheet are 6 coloane pe 13 rânduri de celule de 92 de pixeli. Numerotează rândurile de la 0. Rândul 0 este rândul de rotație, sari peste el. Rândurile 1 până la 4 sunt walk (sud, vest, est, nord, 6 cadre), rândurile 5 până la 8 attack, rândurile 9 până la 12 idle (4 cadre).

Setări care contează

  • Pixel art activat. Texturile folosesc filtrare nearest și fără mip-uri, ca pixelii să rămână clari.
  • Pivot jos, la centru. Picioarele rămân în același loc în fiecare cadru.
  • Cadre pe secundă. Cere vitezele dorite. AI-ul a folosit 15 pentru toate, ceea ce repeta un idle de 4 cadre în aproximativ un sfert de secundă. Idle 6, walk 12 și attack 14 au arătat bine.
  • Ordinea direcțiilor. O secvență multidirecțională merge în sens orar începând de sus: nord, est, sud, vest.
  • Valorile de pe un actor plasat câștigă. Un cooldown sau o viteză setate pe un actor din nivel înving valoarea implicită din Blueprint, așa că verifică copiile plasate când o modificare pare că nu face nimic.

Ține sprite-ul cu fața spre cameră

Aceasta este configurația care a oprit sprite-ul din a se roti, a se înclina sau a ajunge pe muchie:

  • Dezactivează rotirea actorului. Controller yaw dezactivat, orient rotation to movement dezactivat, controller desired rotation dezactivat. Dacă rămân activate, cardul se rotește odată cu actorul și poate ajunge pe muchie.
  • Fă spawn cu yaw 0. Un yaw de spawn de 180 face cardul să se încline în depărtare de o cameră fixă în lume.
  • Fixează spring arm-ul de lume. Pawn control rotation dezactivat, inherit pitch, yaw și roll dezactivate, collision test dezactivat. Un pitch de -40 și un yaw de -90 au mers.
  • Înclină cardul o singură dată. Cu camera privind în jos la 40 de grade, dă sprite-ului un roll de -40 și ridică-l ca picioarele să atingă podeaua.
  • Mișcă-te pe axele lumii, nu de-a lungul vectorului forward sau right al actorului.
  • Arată direcția cu Set Directionality. Alimentează-l cu o variabilă Vector2D numită Facing. Scrie Facing la fiecare tick din viteză și păstrează ultima valoare când personajul se oprește.

Cu acea cameră, tastele se mapează astfel:

  • D mișcă pe +X, Facing (1, 0).
  • W mișcă pe -Y, Facing (0, 1).
  • A mișcă pe -X, Facing (-1, 0).
  • S mișcă pe +Y, Facing (0, -1).

Dacă stânga și dreapta sau sus și jos ies inversate, inversează semnul acelei părți din Facing. Nu roti actorul ca să compensezi.

Testează în joc

  • O tranziție nu face nimic până când regula ei poate să se schimbe. O regulă nouă este „never”, iar o regulă care citește o variabilă are nevoie de ceva care să scrie acea variabilă, de obicei tick-ul Animation Blueprint. Cere un test în joc care raportează animația curentă.
  • Dă-i lui Facing o valoare inițială. Se scrie doar cât timp personajul se mișcă, așa că un atac înainte de primul pas citește zero. O valoare implicită spre sud rezolvă asta.
  • Lasă eroul să privească spre țintă. Dacă atacul trebuie să lovească ceva din lateral, cere AI-ului să seteze Facing spre cel mai apropiat inamic înainte de lovitură.

O sesiune reală

Clipul de colaborare a fost construit în patru prompt-uri în chatul CoPilot, cu agentul Claude Code. AI-ul și-a rulat propriile teste în joc și a reparat ce a găsit. Timpurile sunt de pe o singură mașină.

  1. Două personaje importate, cu mașini de stări pentru idle, walk și attack: aproximativ 2,5 minute.
  2. Un erou jucabil (WASD pentru mișcare, Space pentru atac), o cameră cu spring arm, un game mode și un sătean care merge între trei puncte: aproximativ 7 minute.
  3. Un schelet inamic care urmărește și atacă, puncte de viață și un contor de viață pe ecran: aproximativ 7 minute.
  4. Lupi rătăcitori, ierburi de colectat și un contor de ierburi: aproximativ 7 minute.

Aspectul este o muncă separată

AI-ul construiește animația și gameplay-ul. Aspectul clipului a fost setat în nivel, nu de AI:

  • Lumină caldă de soare și de felinar.
  • Bloom, o vinietă și o adâncime de câmp mică pentru un efect tilt-shift.
  • Un material emisiv unlit pe personaje.

Începe cu materialul unlit și o expunere fixă. Reglarea expunerii din ochi pe parcursul multor runde a costat mai mult timp decât a adus.

Limite

  • AI-ul nu știe ce animație conține fiecare rând din sheet. Trebuie să i-o spui tu.
  • Inamicii merg direct spre erou, fără pathfinding în jurul obiectelor.
  • La un unghi exact de 45 de grade, două axe sunt la egalitate, iar animația alege est.
  • Viața se oprește la 0. Nu se întâmplă nimic altceva până nu ceri o moarte.
  • Nu a putut citi starea unei animații în mijlocul unei taste ținute apăsate și a spus asta în loc să ghicească.

Permisiuni

Citirea este liberă: inspectarea unui asset, a unui graf sau a unei animații în execuție nu cere niciodată permisiunea. Modificările urmează setarea ta Ask Before Edit sau Auto Edit, la fel ca orice altă unealtă.


Cum funcționează

  • Nicio legătură între plugin-uri. Extensia ajunge la PaperZD doar prin reflecție, așa că Ultimate Engine CoPilot face build și rulează la fel cu sau fără PaperZD instalat, iar extensia continuă să funcționeze între versiunile PaperZD cu același design. Dacă o actualizare redenumește ceva, unealta numește câmpul lipsă în loc să ghicească.
  • Peste tot deodată. Uneltele funcționează în chatul CoPilot, în clienții MCP externi precum Claude Code și Cursor și în agenții de programare. Vezi Integrare MCP.
  • 39 de unelte. Unelte de creare, inspecție și de timp de joc pentru surse, secvențe, notify-uri, skin-uri, Animation Blueprints, grafuri, mașini de stări, personaje și Sequencer.

Vezi Extensii pentru cum funcționează extensiile și Testare în joc pentru cum verifică AI-ul un joc care rulează.