Daha iyi bir Türkiye mümkün! Türkiye'nin girişimcilik ve inovasyon topluluğu·2018'den beri

Oyun Geliştirme

/oyungelistirme

Unity, Unreal, Godot ya da kendi motorun — mobil, masaüstü ve web oyunlarının üretim kanalı. Oyun tasarımı, mekanik kurgusu, seviye tasarımı, sanat ve ses, optimizasyon ve mağaza yayını burada konuşulur. İlk prototipini utanma paylaş; oyun geliştirmek maraton işidir ve bu kanal, o maratonu birlikte koşanların kampıdır. Türkiye'nin oyun girişimciliği dalgasına katılmak için doğru yerdesin.

#oyun geliştirme akışına dön
@endof · 4 gün önce

Oyunda kayıt dosyası sürümleme: güncelleme sonrası oyuncunun ilerlemesini silmemek

Hafta sonları küçük bir strateji oyunu geliştiriyorum, birkaç yüz oyuncusu olan, erken erişimde bir proje. Geçen ay yaptığım bir güncelleme oyuncuların bir kısmının kayıtlarını açılamaz hale getirdi. Kimse ilerlemesini kaybetmedi çünkü eski dosyalar diskte duruyordu, ama iki gün boyunca topluluk sayfası şikâyetle doldu. Bu deneyimden sonra kayıt sistemini baştan kurdum, öğrendiklerimi yazıyorum.

Hatanın kaynağı basitti. Birim sınıfına yeni bir alan ekledim ve kayıt dosyasını doğrudan bu sınıfın yapısından üretiyordum. Eski kayıtta bu alan yoktu, yükleyici de eksik alanla karşılaşınca hata verip duruyordu. Kendi testlerimde hep yeni kayıtla başladığım için hiç görmedim.

Şimdi kullandığım düzen şu. Her kayıt dosyasının başında bir sürüm numarası var. Kayıt yapısında her değişiklikte bu numarayı artırıyorum ve bir önceki sürümden bir sonrakine dönüştüren küçük bir fonksiyon yazıyorum. Yükleyici dosyanın sürümüne bakıyor, güncel sürüme gelene kadar dönüştürücüleri sırayla çalıştırıyor. Üç sürüm eski bir dosya üç adımda güncelleniyor. Bu yöntemi veritabanı migration'larından aldım, oyun dünyasına da birebir uyuyor.

İkinci kural: kayıt yapısını oyun içi sınıflardan ayırdım. Kayıt için ayrı, sade veri yapıları var ve oyun nesneleri bunlardan kuruluyor. Böylece kodu yeniden düzenlediğimde kayıt dosyası etkilenmiyor. Başta fazladan iş gibi geldi ama refactoring yaparken çok rahatladım.

Üçüncüsü, eski kayıtları test etmek. Her yayınlanan sürümden birkaç gerçek kayıt dosyasını bir test klasöründe saklıyorum. Otomatik test her derlemede bunları yükleyip birkaç kontrol yapıyor: oyuncunun altını doğru mu, harita yükleniyor mu, birim sayısı tutuyor mu. Geçen ayki hatayı bu test yakalardı.

Dördüncüsü, yazma sırasında bozulmaya karşı önlem. Oyun kayıt yazarken kapanırsa ya da elektrik giderse yarım bir dosya kalabiliyor. Önce geçici bir dosyaya yazıp yazma tamamlanınca asıl dosyanın yerine koymak ve bir önceki kaydı yedek olarak tutmak bu riski büyük ölçüde azaltıyor.

Son bir not, metin mi ikili biçim mi sorusu. Ben JSON kullanıyorum, dosyalar biraz büyük ama hata ayıklarken açıp okuyabilmek çok değerli. Oyuncuların kayıtları elle düzenlemesi de mümkün oluyor; tek oyunculu bir oyunda bunu sorun görmüyorum.
12 2 yorum
Yorumlar (2)
@selimkolcak · 4 gün önce 0
Videolarda incelediğim erken erişim oyunlarında en sert olumsuz yorumların kaynağı tam olarak bu. Oyuncu bir güncelleme sonrası yirmi saatlik kaydını kaybedince oyun ne kadar iyi olursa olsun puanı düşürüyor. Güncelleme notlarında kayıt uyumluluğunu açıkça yazmanızı öneririm; uyumlu değilse oyuncuya önceden haber vermek tepkiyi yumuşatıyor.
@mean · 3 gün önce 5
Kayıtları elle düzenleme konusuna bir uyarı: tek oyunculu oyunda sorun olmayabilir ama ileride liderlik tablosu ya da başarım sistemi eklerseniz düzenlenmiş kayıtlar oraya da yansır. JSON'u okuyunca güvenmeden önce değerleri makul aralıkta mı diye kontrol edin. Bozuk ya da kasıtlı olarak değiştirilmiş bir dosya, yükleyicide çökme yerine anlamlı bir hata mesajı vermeli.
Tanıtım videosu · 1 dk

inovanadolu'yu 1 dakikada tanı

Kanallar, sözlük, İlham blogu, kişilik testleri ve 102 ücretsiz araç. Üretenlerin buluşma noktasında neler olduğunu kısaca izle.