06-04-2022, Saat: 17:50
Merhabalar,
Aklımı kurcalayan bir soruyu iletmek istiyorum.
Örneğin; oyunun save objectinde 1 adet Struct verimiz var. (O struct içinde de başka structlar, değişkenler mevcut) Bu şekilde oyunu yayınladık. Daha sonra oyuna patch atmak istiyoruz fakat bu structın içeriği değişti, bazı alanlar silindi bazılarına yenisi eklendi. Örneğin oyuncu bir eşyanın kilidini açtı ve bu o save dosyasında tutuluyor. Fakat daha sonrasında yeni eşyalar ekledik diyelim save dosyasını silip tekrar yüklediğimizde eski eşyalarında kilidi tekrar kapanacaktır.
Bu şekilde sorunlar oluşmaması için oyunu bozmadan mantıklı bir sistem nasıl tasarlanabilir?
Save işinde structure maalesef bela, evet dediğin yöntem geçerli herşeyi tek struct içinde toplayıp kaydetmek ancak dediğin gibi structure içinde değişiklik yapıp güncellersen maalesef patlıyor, eski save dosyasını silinmezse direk bug olarak dönüyor geriye, en önemlisi baştan doğru structure kurmak, son çare (denemeden söylüyorum) yeni patch te eski save dosyasını alıp yeni structure ile karşılaştırmak, mevcut olanları yeniye işleyip yeniden kaydettirmek.
07-04-2022, Saat: 06:30
(Son Düzenleme: 07-04-2022, Saat: 06:33, Düzenleyen: erginegider.)
Bunun için uygulanan yöntemler var. Sanırım ismine "versioning" deniyor. Sistemi şöyle özetleyim:
1. İki save game objectin olacak. Birinin içinde structın diğerinde de versiyon tutan bir değişkenin ile birlikte struct ı gösteren bir "slotname" yada id olacak.
2. Save işlemlerini yöneten ve kolaylaştıran yeni bir sınıf yaratacaksın. Bu bir singleton, uobject hatta actor bile olabilir. SaveObject sınıfından türettiğin yeni bir sınıfta uygundur. Game instance ta yapacağın yardımcı fonksiyonlar da kullanabilirsin.
3. Bu yeni yarattığın yardımcı class, içerisinde yapacağın fonksiyonlarla, sistem versiyon yönetimini gerçekleştirecek. Diyelim ki yeni bir versiyon ekleyeceksin. Version 6 diyelim. Bunun için bu yardımcı class ında 2 yeni fonksiyon olacak. Birinci fonksiyon save zamanında versiyon numarasını kaydettikten sonra ona tekabül eden struct ı da save edecek. İkinci fonksiyon ise load zamanında eğer kayıt son versiyondaysa direk yükleme yapacak ancak daha önceki versiyonlardaysa onları load edip yeni versiyona dönüştürecek.
4. Böylece save sistemine her versiyon eklemek istediğinde bu iki fonksiyonda güncellemeler yapman gerekecek.
Zaten çok sık olacak bir şey değil. Bir oyun geliştirme süreci için 6 ya da 7 kere değişiklik yapmak istesen, her seferinde bu fonksiyonları güncellediğinden sana en fazla ekstra 8 10 saate mal olacaktır toplamda.