Unity Eğitim
Dersler
Forum Sınav Merkezi Premium 💎
C# Dersleri

Unity'de BinaryFormatter ile Veri Kaydetme: Adım Adım Anlatım

Paylaşan: Unity Eğitim 07 September 2025 3 dakika okuma 118 görüntülenme

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.

🧠 Ders Sonu Değerlendirme Testi

Dersi tamamladıktan sonra bilgilerinizi test edin ve ekstra puanlar kazanın.

🔥 +50 XP Ödül
🔒

Sınava Katılmak İçin Giriş Yapın

Bu ders sonu testini çözebilmek, bilginizi test edip **+50 XP** kazanmak ve **Sınav Şampiyonu** rozetinin kilidini açmak için üye girişi yapmalısınız.

Yorumlar (0)

Yorum yazabilmek ve derslere katkıda bulunabilmek için giriş yapmalısınız.

İlk yorumu siz yapın!