Cosmic Rumble'da her seviye küçük, yuvarlak bir gezegenin üzerinde geçiyor. Unity'nin varsayılan Rigidbody2D yerçekimi tek bir global aşağı vektörü varsayıyor; oyuncular, mermiler ve efektler gezegenin yüzeyine yapışıp merkeze doğru çekilmesi gerektiğinde bu yaklaşım işe yaramıyor. Bu yüzden her gezegenin kendi merkezine göre çalışan custom bir radyal yerçekimi sistemi kurduk.
Sistem tasarımı
Her gezegen nesnesi bir merkez nokta ve bir yerçekimi kuvveti (gezegenin "kütlesine" bağlı) tanımlıyor. Sahnedeki her Rigidbody2D için Unity'nin gravityScale değeri sıfırlanıyor ve yerçekimi elle, her FixedUpdate'te uygulanıyor. Böylece aynı sahnede birden fazla gezegen olsa bile her biri kendi çekim alanını koruyor.
Yerçekimi hesaplama
Hesaplama basit: yön vektörü nesnenin pozisyonundan gezegenin merkezine doğru normalize ediliyor, kuvvet bu yönde gezegenin çekim gücüyle çarpılıp Rigidbody2D.AddForce ile uygulanıyor. Ayrıca nesnenin "yukarısı" gezegenin yüzey normaline hizalanacak şekilde yumuşak bir rotasyon uygulanıyor, böylece karakterler ve mermiler gezegenin eğriliğine göre doğru yönde duruyor.
Rüzgar direnci
Salt yerçekimi yeterli değildi — Worms tarzı topçu atışlarının inandırıcı hissettirmesi için her gezegene rüzgar yönü ve şiddeti eklendi. Mermi hızına ters yönde çalışan bir sürtünme kuvveti ve gezegene özel rüzgar vektörü, atış yörüngesinin hem yerçekimi eğriliğine hem rüzgara göre hesaplanmasını zorunlu kılıyor — oyuncunun nişan alırken iki değişkeni birden dikkate alması gerekiyor.
Performans: object pooling
Sahnede aynı anda onlarca mermi ve parçacık, her FixedUpdate'te kendi yerçekimi hesaplarını yapıyor. Bunu ucuz tutmak için iki şey yapıldı: her nesne sadece en yakın/ilgili gezegenin çekimini hesaplıyor (sahnedeki tüm gezegenlerin toplamını almak yerine), ve mermi/parçacık nesneleri instantiate/destroy yerine object pooling ile yeniden kullanılıyor — bu da GC spike'larını ortadan kaldırdı.
Sonuç
Bu radyal yerçekimi sistemi Cosmic Rumble'ın en ayırt edici mekaniklerinden biri oldu. Combat tarafında action queue ve state management üzerine kurulu turn-based savaş mimarisini ayrı bir yazıda ele alacağım.