Oyunlarda kayıt (save) sistemi tasarlamak
Kayıt sistemi genellikle projenin sonuna bırakılır, sonra da oyunun her yerine dokunmayı gerektirdiği için en çok uğraştıran özelliklerden biri olur. Baştan birkaç kurala uymak işi çok kolaylaştırır.
Neyi kaydedeceğini belirle
Her şeyi kaydetmeye çalışma, oyunu yeniden kurmak için gereken en küçük veriyi kaydet:
- Oyuncunun konumu, canı, envanteri, açılan yetenekler
- Görevlerin durumu, açılan kapılar, toplanan nesneler (kimlikleriyle)
- Ayarlar (ses, kontroller) genellikle ayrı bir dosyada tutulur
Ekrandaki her düşmanın animasyon karesini kaydetmen gerekmez. Bölümü yeniden yükleyip "toplanan nesneler listesinde olanları sil" demek çoğu zaman yeterlidir.
Veriyi oyun nesnelerinden ayır
Sahnedeki nesneleri doğrudan serileştirmek yerine sade bir veri yapısı oluştur:
{
"surum": 3,
"oyuncu": { "x": 412.5, "y": 88.0, "can": 74, "envanter": ["anahtar_kirmizi", "iksir"] },
"bolum": "magara_2",
"toplananlar": ["altin_017", "altin_018"],
"gorevler": { "kayip_kedi": "tamamlandi" },
"kayit_zamani": "2026-11-10T21:14:00Z"
}
Her kaydedilecek nesnenin sabit bir kimliği olsun (altin_017). Sahnedeki sırası ya da motorun verdiği otomatik kimlik, bölümü düzenlediğinde değişebilir.
Sürüm numarası ekle
Oyunu güncellediğinde kayıt yapısı değişecek. Dosyaya surum alanı koy ve yükleme sırasında eski sürümleri dönüştür:
yükle → surum 1 ise 2'ye çevir → surum 2 ise 3'e çevir → oyuna ver
Bunu yapmazsan güncellemeden sonra oyuncuların kayıtları bozulur, bu da en kötü yorumları getirir.
Bozulmaya karşı korun
- Önce geçici dosyaya yaz, sonra yeniden adlandır. Yazma sırasında oyun çökerse ya da elektrik giderse eski kayıt sağlam kalır.
- Bir önceki kaydı yedek olarak tut. Yeni kayıt okunamazsa yedeği yükle.
- Yükleme sırasında hata olursa oyunu çökertme, kullanıcıya açıklayıcı bir mesaj göster.
Nereye kaydedilir?
Oyun klasörüne değil, platformun kullanıcı verisi klasörüne kaydet. Oyun motorlarının çoğu bunun için hazır bir yol sunar (Unity'de Application.persistentDataPath, Godot'ta user://). Oyun klasörüne yazma izni her sistemde olmayabilir.
Biçim seçimi
- JSON: Okunabilir, hata ayıklaması kolay. Çoğu bağımsız oyun için yeterli.
- İkili (binary) biçim: Daha küçük ve hızlı, ama hata ayıklaması zor.
- Şifreleme: Hile yapılmasını tamamen engellemez, en fazla zorlaştırır. Tek oyunculu oyunda buna çok emek harcamaya değmez. Çok oyunculu oyunlarda ise önemli veri zaten sunucuda tutulmalı.
Erken başla
Kayıt sistemini ilk prototipten sonra, oyunun 2-3 temel sistemi oturduğunda kur. Her yeni özellik eklediğinde "bu kaydediliyor mu?" sorusunu sor. Sona bırakırsan bütün sistemleri geri dönüp değiştirmen gerekir.