PaperZD
Bangun animasi karakter 2D di PaperZD cukup dengan meminta: flipbook dari sprite sheet, animation source, Animation Blueprint, state machine, karakter yang bisa dimainkan, dan pengecekan saat bermain.
PaperZD dari Critical Failure Studio adalah sistem animasi yang dipakai kebanyakan game Paper2D: graph animasi dan state machine untuk karakter flipbook. Gratis di Fab dan di GitHub.
Dengan ekstensi PaperZD, Ultimate Engine CoPilot membangun semua setup itu untukmu, dari sprite sheet sampai karakter yang bisa berjalan dan menyerang saat bermain.
Ekstensi ini diuji dengan PaperZD 2.2.4 di Unreal Engine 5.7.
Yang kamu butuhkan
- PaperZD, terinstal dan dinyalakan di proyekmu. Ia memakai plugin Paper2D bawaan Unreal, yang ikut dinyalakan oleh PaperZD.
- Sprite sheet untuk karakter kamu, atau flipbook yang sudah ada.
Ditambah Ultimate Engine CoPilot dengan ekstensi PaperZD yang sudah dinyalakan.
Tanpa PaperZD, ekstensi ini tidak melakukan hal yang merugikan. Setiap alat PaperZD menjawab dengan satu pesan yang menyebutkan apakah plugin sudah terinstal, dinyalakan, dan dimuat, serta apa yang perlu dilakukan selanjutnya.
Menyiapkannya
- Instal PaperZD dari Fab atau GitHub dan nyalakan di proyekmu. Restart editor jika Unreal memintanya.
- Di CoPilot, buka Pengaturan > Ekstensi dan nyalakan PaperZD. Ekstensi ini mati secara default.
- Minta AI mengecek status PaperZD. AI melaporkan apakah PaperZD ditemukan dan, jika tidak, apa yang kurang.
Yang bisa kamu minta
- “Ini sprite sheet knight-ku, 6 kolom kali 13 baris. Buat flipbook untuk idle, walk, dan attack dalam empat arah, lalu siapkan PaperZD untuknya.”
- “Tambahkan state machine dengan Idle, Walk, dan Attack. Walk saat karakter bergerak, kembali ke Idle saat berhenti, dan Attack diputar sekali lalu kembali ke Idle.”
- “Buat animasinya menghadap ke arah karakter bergerak.”
- “Buat karakter yang bisa dimainkan dengan WASD untuk bergerak dan Space untuk menyerang, dengan kamera di belakangnya, dan game mode yang men-spawn-nya.”
- “Tambahkan suara langkah kaki ke animasi walk.”
- “Ganti karakter ke palet merah saat game sedang berjalan.”
Di balik permintaan seperti itu, AI bisa:
- Memotong sprite sheet menjadi animasi. Satu panggilan mengubah sebuah sheet menjadi sprite, flipbook, animation sequence, animation source, dan Animation Blueprint. Animasi dengan beberapa arah menjadi satu sequence multi-directional.
- Membangun graph animasi. Node play sequence, state machine, direction, override slot, pemilih berdasarkan bool, angka, atau enum, random player, dan cached animation, lalu menyambungkannya.
- Membangun state machine. State, conduit, dan jump, dengan transisi yang terpicu oleh sebuah variabel, saat animasi saat ini selesai, selalu, atau tidak pernah, dengan prioritas dan sequence transisi opsional.
- Menambahkan notify. Event kustom, suara, dan efek Niagara atau partikel di timeline, dengan notify kustom yang menjadi fungsi yang bisa kamu isi.
- Menambahkan skin. Flipbook pengganti per animasi, untuk kostum atau pertukaran palet, yang diterapkan saat game berjalan.
- Membuat karakter. Karakter PaperZD baru yang digerakkan oleh Animation Blueprint, atau menghubungkan actor yang sudah ada. AI juga bisa menambahkan track PaperZD ke Level Sequence.
- Mengeceknya saat bermain. Membaca sequence mana yang sedang diputar, sudah sejauh mana, dan nilai variabel animasi, serta memutar, menghentikan, atau melompat ke sebuah animasi untuk menguji transisi secara manual.
Kesalahan yang dihindarinya
PaperZD punya beberapa jebakan yang berhasil dikompilasi dengan bersih tetapi tetap tidak melakukan apa-apa. AI mengetahuinya:
- Aturan transisi baru adalah “never” sampai diatur, jadi karakter tidak akan pernah keluar dari Idle.
- Variabel yang dibaca sebuah aturan harus ditulis di suatu tempat, biasanya di tick Animation Blueprint. Kompilasi yang bersih tidak membuktikan bahwa aturan itu pernah berubah, jadi AI mengeceknya saat bermain.
- Sebuah sequence hanya diputar di Animation Blueprint milik animation source-nya sendiri, jadi AI menjaga asset tiap karakter tetap bersama.
- State dan transisi dikompilasi dalam satu batch di akhir sekelompok edit, bukan setelah setiap edit.
- Grid sprite sheet dibaca dari kiri ke kanan mulai dari atas, jadi AI menghitung sel dengan cara yang sama seperti PaperZD.
Tips dan trik
Ini berasal dari membangun desa kecil yang bisa dimainkan dengan PaperZD dan CoPilot: seorang pahlawan, seorang penduduk desa, musuh skeleton, dan serigala yang berkeliaran. Diuji dengan PaperZD 2.2.4 di Unreal Engine 5.7.
Tiga hal yang paling penting:
- Beri tahu AI susunan baris sheet-mu yang sebenarnya. Beri nomor baris mulai dari 0, sebutkan baris mana yang animasi dan baris mana yang bukan, lalu buka frame pertama setiap flipbook untuk memeriksanya.
- Jangan pernah memutar actor. Flipbook adalah kartu datar, jadi arahnya harus datang dari animasi mana yang diputar, bukan dari memutar actor.
- Jangan percaya kompilasi yang bersih. Minta play test yang melaporkan animasi saat ini dan variabelnya.
Jelaskan sheet-nya dengan tepat
AI tidak bisa melihat baris mana di sheet-mu yang berisi animasi apa. Kamu harus memberi tahunya.
- Sheet yang diekspor dari PixelLab punya 6 kolom dan 13 baris sel berukuran 92 piksel, dengan empat arah di setiap animasi dengan urutan selatan, barat, timur, utara. Baris 0 adalah baris pose rotasi, bukan animasi.
- Hasil ekspor disertai file tata letak yang mencantumkan baris mana yang berisi animasi apa. Pakailah. Urutannya berbeda untuk tiap karakter: di desa itu, pahlawan dan penyihir (mage) punya walk lebih dulu, skeleton attack lebih dulu, dan serigala idle lebih dulu.
- Hitung dari 0 dan sebutkan baris rotasinya. Dalam satu sesi, prompt-nya berbunyi “baris 1 sampai 4 adalah walk”. AI menghitung dari 1, sehingga setiap animasi meleset satu baris dan pahlawan menghadap ke arah yang salah.
Tulis baris-barisnya seperti ini:
Setiap sheet berukuran 6 kolom kali 13 baris dengan sel 92 piksel. Beri nomor baris mulai dari 0. Baris 0 adalah baris rotasi, lewati. Baris 1 sampai 4 adalah walk (selatan, barat, timur, utara, 6 frame), baris 5 sampai 8 attack, baris 9 sampai 12 idle (4 frame).
Pengaturan yang penting
- Pixel art menyala. Tekstur memakai nearest filtering dan tanpa mip, jadi piksel tetap tajam.
- Pivot di tengah bawah. Kaki tetap di titik yang sama di setiap frame.
- Frame per detik. Minta kecepatan yang kamu inginkan. AI memakai 15 untuk semuanya, yang membuat idle 4 frame berulang dalam sekitar seperempat detik. Idle 6, walk 12, dan attack 14 terlihat pas.
- Urutan arah. Sequence multi-directional berjalan searah jarum jam dari atas: utara, timur, selatan, barat.
- Nilai pada actor yang ditempatkan menang. Cooldown atau kecepatan yang diatur pada actor di level mengalahkan default Blueprint, jadi periksa salinan yang ditempatkan saat sebuah perubahan terasa tidak berpengaruh.
Jaga sprite tetap menghadap kamera
Ini setup yang menghentikan sprite berputar, miring, atau menjadi tipis dari samping:
- Matikan rotasi actor. Controller yaw mati, orient rotation to movement mati, controller desired rotation mati. Jika dibiarkan menyala, kartu ikut berputar bersama actor dan bisa menjadi tipis dari samping.
- Spawn dengan yaw 0. Yaw spawn 180 membuat kartu condong menjauhi kamera yang tetap di dunia.
- Kunci spring arm ke dunia. Pawn control rotation mati, inherit pitch, yaw, dan roll mati, collision test mati. Pitch -40 dan yaw -90 berhasil.
- Miringkan kartu sekali saja. Dengan kamera menatap ke bawah 40 derajat, beri sprite roll -40, lalu angkat agar kakinya menyentuh lantai.
- Bergerak di sumbu dunia, bukan sepanjang vektor forward atau right milik actor.
- Tunjukkan arah dengan Set Directionality. Beri ia variabel Vector2D bernama Facing. Tulis Facing di setiap tick dari kecepatan dan pertahankan nilai terakhir saat karakter berhenti.
Dengan kamera itu, tombolnya dipetakan seperti ini:
- D bergerak sepanjang +X, Facing (1, 0).
- W bergerak sepanjang -Y, Facing (0, 1).
- A bergerak sepanjang -X, Facing (-1, 0).
- S bergerak sepanjang +Y, Facing (0, -1).
Jika kiri dan kanan atau atas dan bawah tertukar, balik tanda bagian Facing tersebut. Jangan memutar actor untuk mengompensasinya.
Uji saat bermain
- Transisi tidak melakukan apa-apa sampai aturannya bisa berubah. Aturan baru adalah “never”, dan aturan yang membaca sebuah variabel membutuhkan sesuatu yang menulis variabel itu, biasanya tick Animation Blueprint. Minta play test yang melaporkan animasi saat ini.
- Beri Facing nilai awal. Nilainya hanya ditulis saat karakter bergerak, jadi attack sebelum langkah pertama membaca nol. Default selatan memperbaikinya.
- Biarkan pahlawan menghadap target. Jika serangan harus mengenai sesuatu di satu sisi, minta AI mengatur Facing ke arah musuh terdekat sebelum mengayun.
Sesi nyata
Klip kolaborasi dibuat dalam empat prompt di chat CoPilot, dengan agen Claude Code. AI menjalankan play test-nya sendiri dan memperbaiki apa yang ditemukannya. Waktu diambil dari satu mesin.
- Dua karakter diimpor, dengan state machine idle, walk, dan attack: sekitar 2,5 menit.
- Pahlawan yang bisa dimainkan (WASD untuk bergerak, Space untuk menyerang), kamera spring-arm, game mode, dan seorang penduduk desa yang berjalan di antara tiga titik: sekitar 7 menit.
- Musuh skeleton yang mengejar dan menyerang, hit point, dan penghitung nyawa di layar: sekitar 7 menit.
- Serigala yang berkeliaran, herba yang bisa dikumpulkan, dan penghitung herba: sekitar 7 menit.
Tampilannya adalah pekerjaan terpisah
AI membangun animasi dan gameplay. Tampilan klip diatur di level, bukan oleh AI:
- Cahaya matahari dan lentera yang hangat.
- Bloom, vignette, dan depth of field yang dangkal untuk kesan tilt-shift.
- Material emissive unlit pada karakter.
Mulailah dengan material unlit dan exposure yang tetap. Menyetel exposure dengan mata selama banyak putaran memakan lebih banyak waktu daripada hasilnya.
Batasan
- AI tidak tahu animasi apa yang ada di setiap baris sheet-mu. Kamu harus memberi tahunya.
- Musuh berjalan lurus ke arah pahlawan, tanpa pathfinding mengelilingi properti.
- Pada sudut tepat 45 derajat, dua sumbu seri dan animasi memilih timur.
- Nyawa berhenti di 0. Tidak ada hal lain yang terjadi sampai kamu meminta kematian.
- AI tidak bisa membaca state animasi di tengah penekanan tombol yang ditahan, dan AI mengatakannya alih-alih menebak.
Izin
Membaca itu bebas: memeriksa asset, graph, atau animasi yang sedang berjalan tidak pernah bertanya. Perubahan mengikuti pengaturan Ask Before Edit atau Auto Edit kamu, sama seperti setiap alat lainnya.
Cara kerjanya
- Tidak ada tautan antar-plugin. Ekstensi menjangkau PaperZD hanya lewat reflection, jadi Ultimate Engine CoPilot dibangun dan berjalan sama saja dengan atau tanpa PaperZD terinstal, dan ekstensi tetap berfungsi di berbagai versi PaperZD dengan desain yang sama. Jika sebuah pembaruan mengganti nama sesuatu, alatnya menyebutkan field yang hilang alih-alih menebak.
- Di mana saja sekaligus. Alat-alat ini bekerja di chat CoPilot, di klien MCP eksternal seperti Claude Code dan Cursor, dan di coding agent. Lihat Integrasi MCP.
- 39 alat. Alat authoring, inspeksi, dan waktu bermain untuk source, sequence, notify, skin, Animation Blueprint, graph, state machine, karakter, dan Sequencer.
Lihat Ekstensi untuk cara kerja ekstensi, dan Uji Permainan untuk cara AI mengecek game yang sedang berjalan.