Unity oyun geliştirme sürecinde, oyun verilerini kalıcı olarak saklamak ve daha sonra tekrar yüklemek oldukça önemlidir. Bu işlem için çeşitli yöntemler bulunmaktadır. Bu makalede, Unity’de veri kalıcılığı sağlamak için yaygın kullanılan yöntemlerden biri olan BinaryFormatter sınıfını kullanarak veri kaydetme ve yükleme işlemlerini adım adım inceleyeceğiz.
BinaryFormatter Nedir?
BinaryFormatter, .NET Framework’ün System.Runtime.Serialization.Formatters.Binary namespace’inde bulunan bir sınıf olup, verileri ikili (binary) formatta kaydetmeyi ve yüklemeyi sağlar. Bu format, metin tabanlı formatlara (örneğin, JSON) kıyasla daha kompakt ve genellikle daha hızlıdır. Ancak, BinaryFormatter’ın bazı dezavantajları da vardır, bunlara daha sonra değineceğiz.
BinaryFormatter ile Veri Kaydetme
İlk olarak, kaydedilecek verileri temsil eden bir sınıf tanımlayalım. Örneğin, oyun karakterinin durumunu saklayacak bir sınıf oluşturalım:
[Serializable]
public class OyuncuVerisi
{
public string isim;
public int can;
public int puan;
}
[Serializable] özniteliği, sınıfın BinaryFormatter tarafından serialize edilebilir olduğunu belirtir. Şimdi, bu veriyi kaydetmek için bir fonksiyon yazalım:
public void VeriKaydet(OyuncuVerisi oyuncuVerisi, string dosyaYolu)
{
BinaryFormatter bf = new BinaryFormatter();
FileStream dosya = File.Create(dosyaYolu);
bf.Serialize(dosya, oyuncuVerisi);
dosya.Close();
}
Bu fonksiyon, BinaryFormatter nesnesi oluşturur, belirtilen dosya yoluna yeni bir dosya oluşturur ve Serialize metodu ile oyuncu verilerini bu dosyaya kaydeder. Dosyayı kapatmayı unutmamak önemlidir.
BinaryFormatter ile Veri Yükleme
Kaydedilen verileri yüklemek için aşağıdaki fonksiyonu kullanabiliriz:
public OyuncuVerisi VeriYukle(string dosyaYolu)
{
BinaryFormatter bf = new BinaryFormatter();
FileStream dosya = File.Open(dosyaYolu, FileMode.Open);
OyuncuVerisi oyuncuVerisi = (OyuncuVerisi)bf.Deserialize(dosya);
dosya.Close();
return oyuncuVerisi;
}
Bu fonksiyon, kaydedilen dosyayı açar, Deserialize metodu ile verileri geri yükler ve OyuncuVerisi türüne dönüştürür. Yine, dosyayı kapatmak önemlidir.
Örnek Kullanım
Şimdi, bu fonksiyonları nasıl kullanabileceğimize dair bir örnek:
// Veri kaydetme
OyuncuVerisi oyuncu = new OyuncuVerisi { isim = "Ahmet", can = 100, puan = 0 };
VeriKaydet(oyuncu, "oyuncuVerisi.dat");
// Veri yükleme
OyuncuVerisi yuklenenOyuncu = VeriYukle("oyuncuVerisi.dat");
Debug.Log("Yüklenen Oyuncu Adı: " + yuklenenOyuncu.isim);
BinaryFormatter’ın Avantajları ve Dezavantajları
Avantajları:
- Hızlı ve kompakt veri kaydı sağlar.
- Kullanımı nispeten kolaydır.
Dezavantajları:
- Güvenlik açığı: BinaryFormatter, kötü amaçlı kod içeren verileri yükleyebilir. Bu nedenle, güvenilir olmayan kaynaklardan gelen verileri yüklemek için kullanılmamalıdır.
- Sürüm uyumluluğu sorunu: Kaydedilen verilerin formatı, uygulamanın sürümüne bağlıdır. Uygulamanın sürümü değiştiğinde, eski verileri yüklemekte sorun yaşanabilir.
- .NET Core ve .NET 5 ve üzeri sürümlerinde desteklenmez. Alternatif olarak, JSON veya XML gibi daha güvenli ve platformlar arası uyumlu formatlar tercih edilmelidir.
Alternatifler
BinaryFormatter yerine, daha güvenli ve platformlar arası uyumlu alternatifler kullanmak daha iyidir. JSON ve XML gibi formatlar, daha güvenli ve daha iyi sürüm uyumluluğu sunar. Unity’de bu formatları kullanmak için JsonUtility veya üçüncü taraf kütüphaneleri kullanabilirsiniz.
Sonuç
BinaryFormatter, Unity’de veri kaydetmek için basit bir yöntem sunar, ancak güvenlik ve sürüm uyumluluğu sorunları nedeniyle dikkatli kullanılmalıdır. Mümkünse, daha güvenli ve platformlar arası uyumlu alternatifleri tercih etmek önerilir.




