PaperZD
PaperZD'de 2D karakter animasyonunu isteyerek kur: sprite sheet'ten flipbook'lar, animasyon kaynakları, Animation Blueprint'ler, durum makineleri, oynanabilir karakterler ve bir oyun kontrolü.
Critical Failure Studio’nun PaperZD eklentisi, çoğu Paper2D oyununun kullandığı animasyon sistemidir: flipbook karakterler için animasyon grafikleri ve durum makineleri. Fab’da ve GitHub’da ücretsizdir.
PaperZD uzantısıyla Ultimate Engine CoPilot bu kurulumları senin için yapar: bir sprite sheet’ten, oyunda yürüyen ve saldıran bir karaktere kadar.
PaperZD 2.2.4 ile Unreal Engine 5.7 üzerinde test edildi.
Neye ihtiyacın var
- Projende kurulu ve etkin PaperZD. Unreal’in kendi Paper2D eklentisini kullanır, PaperZD onu birlikte etkinleştirir.
- Karakterin için bir sprite sheet ya da hazır flipbook’lar.
Bunlara ek olarak, PaperZD uzantısı açık olan Ultimate Engine CoPilot.
PaperZD olmadan uzantı zararlı hiçbir şey yapmaz. Her PaperZD aracı, eklentinin kurulu, etkin ve yüklenmiş olup olmadığını ve sırada ne yapılacağını söyleyen tek bir mesajla yanıt verir.
Kurulum
- PaperZD’yi Fab’dan ya da GitHub’dan kur ve projende etkinleştir. Unreal isterse editörü yeniden başlat.
- CoPilot’ta Ayarlar > Uzantılar bölümünü aç ve PaperZD’yi aç. Varsayılan olarak kapalıdır.
- AI’dan PaperZD durumunu kontrol etmesini iste. PaperZD’nin bulunup bulunmadığını bildirir, bulunmadıysa neyin eksik olduğunu söyler.
Neler isteyebilirsin
- “Şu şövalye sprite sheet’im, 6 sütun 13 satır. Dört yönde idle, walk ve attack için flipbook’lar yap ve PaperZD’yi buna göre kur.”
- “Idle, Walk ve Attack içeren bir durum makinesi ekle. Karakter hareket ederken Walk’a geç, durunca Idle’a dön, Attack bir kez oynasın ve sonra Idle’a dönsün.”
- “Animasyonlar karakterin hareket ettiği yöne baksın.”
- “Hareket için WASD, saldırı için Space ile oynanabilir bir karakter yap, arkasında bir kamera olsun ve onu oluşturan bir game mode ekle.”
- “Walk animasyonuna bir ayak sesi ekle.”
- “Oyun çalışırken karakteri kırmızı palete geçir.”
Bu isteklerin arkasında AI şunları yapabilir:
- Bir sprite sheet’i animasyonlara kesmek. Tek bir çağrı bir sheet’i sprite’lara, flipbook’lara, animasyon dizilerine, bir animasyon kaynağına ve bir Animation Blueprint’e dönüştürür. Birden çok yönü olan animasyonlar tek bir çok yönlü diziye dönüşür.
- Animasyon grafiğini kurmak. Play sequence, durum makinesi, yön, override slot, bool, sayı ya da enum’a göre seçim, random player ve cached animation düğümleri; ve bunları birbirine bağlamak.
- Durum makineleri kurmak. Durumlar, conduit’ler ve jump’lar; bir değişkene göre, mevcut animasyon bittiğinde, her zaman ya da hiçbir zaman tetiklenen geçişler, bir öncelikle ve isteğe bağlı bir geçiş dizisiyle.
- Notify eklemek. Bir zaman çizelgesinde özel olaylar, sesler ve Niagara ya da parçacık efektleri; özel notify’lar senin doldurabileceğin fonksiyonlara dönüşür.
- Skin eklemek. Kıyafetler ya da palet değişimleri için animasyon başına yedek flipbook’lar, oyun çalışırken uygulanır.
- Karakter yapmak. Animation Blueprint ile yönetilen yeni bir PaperZD karakteri ya da mevcut bir aktörü bağlamak. Ayrıca bir Level Sequence’e PaperZD izi ekleyebilir.
- Oyunda kontrol etmek. Hangi dizinin oynadığını, ne kadar ilerlediğini ve animasyon değişkenlerinin değerlerini okumak; bir geçişi elle denemek için bir animasyonu oynatmak, durdurmak ya da ona atlamak.
Kaçındığı hatalar
PaperZD’nin sorunsuz derlenip yine de hiçbir şey yapmayan birkaç tuzağı var. AI bunları bilir:
- Yeni bir geçişin kuralı ayarlanana kadar “hiçbir zaman”dır, yani karakter Idle’dan asla çıkmaz.
- Bir kuralın okuduğu değişken bir yerde yazılmalıdır, genellikle Animation Blueprint’in tick’inde. Temiz bir derleme kuralın hiç değiştiğini kanıtlamaz, bu yüzden AI oyunda kontrol eder.
- Bir dizi yalnızca kendi animasyon kaynağının Animation Blueprint’inde oynar, bu yüzden her karakterin asset’lerini bir arada tutar.
- Durumlar ve geçişler tek seferde derlenir, her düzenlemeden sonra değil, bir düzenleme grubunun sonunda.
- Sprite sheet ızgarası soldan sağa, yukarıdan başlayarak okunur, bu yüzden AI hücreleri PaperZD’nin saydığı gibi sayar.
İpuçları ve püf noktaları
Bunlar PaperZD ve CoPilot ile oynanabilir küçük bir köy kurarken ortaya çıktı: bir kahraman, bir köylü, iskelet düşmanlar ve dolaşan kurtlar. PaperZD 2.2.4 ile Unreal Engine 5.7 üzerinde test edildi.
En önemli üçü:
- AI’a sheet’inin gerçek satır düzenini söyle. Satırları 0’dan numaralandır, hangi satırların animasyon, hangisinin başka bir şey olduğunu söyle ve kontrol etmek için her flipbook’un ilk karesini aç.
- Aktörü asla döndürme. Bir flipbook düz bir karttır, bu yüzden yön, aktörü çevirmekten değil, hangi animasyonun oynadığından gelmelidir.
- Temiz bir derlemeye güvenme. Mevcut animasyonu ve değişkenlerini bildiren bir oyun testi iste.
Sheet’i tam olarak anlat
AI, sheet’inin hangi satırında hangi animasyonun olduğunu göremez. Ona söylemelisin.
- PixelLab’den dışa aktarılan bir sheet 6 sütun ve 13 satırdan oluşur, hücreler 92 pikseldir ve her animasyonda dört yön güney, batı, doğu, kuzey sırasıyla bulunur. Satır 0 bir animasyon değil, dönüş pozlarından oluşan bir satırdır.
- Dışa aktarma, hangi satırın hangi animasyonu içerdiğini listeleyen bir düzen dosyasıyla gelir. Onu kullan. Sıra karakterden karaktere değişir: köyde kahraman ve büyücü walk ile, iskelet attack ile, kurt idle ile başlıyordu.
- 0’dan say ve dönüş satırını belirt. Bir oturumda istem “1’den 4’e kadar satırlar walk” diyordu. AI 1’den saydı, bu yüzden her animasyon bir satır kaydı ve kahraman yanlış yöne baktı.
Satırları şöyle yaz:
Her sheet 6 sütun ve 13 satırdan oluşan 92 piksellik hücrelerdir. Satırları 0’dan numaralandır. Satır 0 dönüş satırıdır, atla. 1’den 4’e kadar satırlar walk (güney, batı, doğu, kuzey, 6 kare), 5’ten 8’e kadar satırlar attack, 9’dan 12’ye kadar satırlar idle (4 kare).
Önemli ayarlar
- Pixel art açık. Dokular nearest filtering kullanır ve mip kullanmaz, böylece pikseller keskin kalır.
- Pivot alt ortada. Ayaklar her karede aynı noktada kalır.
- Saniyedeki kare. İstediğin hızları iste. AI her şey için 15 kullandı, bu da 4 karelik bir idle’ı yaklaşık çeyrek saniyede döngüye soktu. Idle 6, walk 12 ve attack 14 doğru göründü.
- Yön sırası. Çok yönlü bir dizi yukarıdan saat yönünde ilerler: kuzey, doğu, güney, batı.
- Yerleştirilmiş bir aktördeki değerler kazanır. Seviyedeki bir aktörde ayarlanan bir cooldown ya da hız, Blueprint varsayılanını geçersiz kılar, bu yüzden bir değişiklik hiçbir şey yapmıyormuş gibi göründüğünde yerleştirilmiş kopyaları kontrol et.
Sprite’ı kameraya dönük tut
Sprite’ın dönmesini, yatmasını ya da kenarı dönük kalmasını durduran kurulum bu:
- Aktör dönüşünü kapat. Controller yaw kapalı, orient rotation to movement kapalı, controller desired rotation kapalı. Açık bırakılırsa kart aktörle birlikte döner ve kenarı dönük kalabilir.
- Yaw 0 ile oluştur. 180’lik bir spawn yaw’ı, kartın dünyaya sabit bir kameradan uzağa yaslanmasına neden olur.
- Spring arm’ı dünyaya sabitle. Pawn control rotation kapalı, pitch, yaw ve roll’u miras alma kapalı, collision test kapalı. -40 pitch ve -90 yaw işe yaradı.
- Kartı bir kez eğ. Kamera 40 derece aşağı bakarken sprite’a -40 roll ver ve ayaklar zemine değecek şekilde yukarı kaldır.
- Dünya eksenlerinde hareket et, aktörün forward ya da right vektörü boyunca değil.
- Yönü Set Directionality ile göster. Ona Facing adlı bir Vector2D değişkeni ver. Facing’i her tick’te hızdan yaz ve karakter durduğunda son değeri koru.
Bu kamerayla tuşlar şöyle eşlenir:
- D +X boyunca hareket eder, Facing (1, 0).
- W -Y boyunca hareket eder, Facing (0, 1).
- A -X boyunca hareket eder, Facing (-1, 0).
- S +Y boyunca hareket eder, Facing (0, -1).
Sol ile sağ ya da yukarı ile aşağı ters çıkarsa, Facing’in o bölümünün işaretini çevir. Telafi etmek için aktörü döndürme.
Oyunda dene
- Bir geçiş, kuralı değişebilene kadar hiçbir şey yapmaz. Yeni bir kural “hiçbir zaman”dır ve bir değişkeni okuyan bir kuralın o değişkeni yazan bir şeye ihtiyacı vardır, genellikle Animation Blueprint’in tick’i. Mevcut animasyonu bildiren bir oyun testi iste.
- Facing’e bir başlangıç değeri ver. Yalnızca karakter hareket ederken yazılır, bu yüzden ilk adımdan önceki bir saldırı sıfır okur. Güney varsayılanı bunu çözer.
- Kahramanın hedefe bakmasını sağla. Saldırı bir yandaki bir şeye isabet etmeliyse, AI’dan savurmadan önce Facing’i en yakın düşmana doğru ayarlamasını iste.
Gerçek bir oturum
Collab klibi, CoPilot sohbetinde Claude Code ajanıyla dört istemde kuruldu. AI kendi oyun testlerini çalıştırdı ve bulduklarını onardı. Süreler tek bir makineden.
- İdle, walk ve attack durum makineleriyle içe aktarılan iki karakter: yaklaşık 2,5 dakika.
- Oynanabilir bir kahraman (hareket için WASD, saldırı için Space), bir spring arm kamerası, bir game mode ve üç nokta arasında yürüyen bir köylü: yaklaşık 7 dakika.
- Kovalayan ve saldıran bir iskelet düşman, can puanları ve ekranda bir can sayacı: yaklaşık 7 dakika.
- Dolaşan kurtlar, toplanabilir otlar ve bir ot sayacı: yaklaşık 7 dakika.
Görünüm ayrı bir iştir
AI animasyonu ve oynanışı kurar. Klibin görünümü AI tarafından değil, seviyede ayarlandı:
- Sıcak güneş ve fener ışığı.
- Tilt-shift hissi için bloom, vignette ve sığ bir alan derinliği.
- Karakterlerde unlit bir emissive materyal.
Unlit materyal ve sabit bir pozlamayla başla. Pozlamayı birçok turda gözle ayarlamak, getirdiğinden fazla zamana mal oldu.
Sınırlar
- AI, sheet’inin her satırında hangi animasyonun olduğunu bilmez. Ona söylemelisin.
- Düşmanlar kahramana düz yürür, dekorların etrafından yol bulma yoktur.
- Tam 45 derecelik bir açıda iki eksen berabere kalır ve animasyon doğuyu seçer.
- Can 0’da durur. Sen bir ölüm isteyene kadar başka bir şey olmaz.
- Basılı tutulan bir tuşun ortasında bir animasyon durumunu okuyamadı ve tahmin etmek yerine bunu söyledi.
İzinler
Okumak serbesttir: bir asset’i, bir grafiği ya da çalışan bir animasyonu incelemek hiçbir zaman onay istemez. Değişiklikler, diğer tüm araçlarda olduğu gibi Ask Before Edit ya da Auto Edit ayarını izler.
Nasıl çalışır
- Eklentiler arasında bağlantı yok. Uzantı PaperZD’ye yalnızca reflection ile ulaşır, bu yüzden Ultimate Engine CoPilot, PaperZD kurulu olsa da olmasa da aynı şekilde derlenir ve çalışır; uzantı da aynı tasarımdaki PaperZD sürümleri arasında çalışmaya devam eder. Bir güncelleme bir şeyi yeniden adlandırırsa, araç tahmin etmek yerine eksik alanın adını söyler.
- Her yerde aynı anda. Araçlar CoPilot’un sohbetinde, Claude Code ve Cursor gibi harici MCP istemcilerinde ve kodlama ajanlarında çalışır. Bkz. MCP Entegrasyonu.
- 39 araç. Kaynaklar, diziler, notify’lar, skin’ler, Animation Blueprint’ler, grafikler, durum makineleri, karakterler ve Sequencer için yazım, inceleme ve oyun zamanı araçları.
Uzantıların nasıl çalıştığı için Uzantılar sayfasına, AI’ın çalışan bir oyunu nasıl kontrol ettiği için Oyun Testi sayfasına bak.