Geliştirdiğimiz oyun ve uygulamalarda bazı verileri daha sonra kullanmak üzere kaydetmek isteriz. Bu veriler oyundaki para,altın,level bilgisi vb. olabilir. Bu bilgileri kaydetmenin birkaç farklı yolu vardır. Bunlardan ilki Google Oyunlar kullanarak kullanıcıların başarımlarını kaydetmektir. Bununla ilgili daha sonra bir yazı yazacağım. İkinci yöntem ise uzak bir sunucuda bulunan veritabanına erişip bilgileri burada tutmaktır. Fakat bu yöntem de ilk yöntem gibi internet bağlantısı gerektirir. Ayrıca uygulamadan doğrudan sunucuya veri göndermek güvenli bir eylem değildir. Üçüncü yöntem ise Unity kütüphanesinde bulunan PlayerPrefs sınıfıdır. Bu sınıf yardımıyla aşağıdaki örneklerdeki gibi verilerimizi kaydedebilir ve daha sonra yerelden çekebiliriz. Fakat unity dökümantasyonlarında belirtildiği gibi bu yöntem de çok güvenli ve esnek değildir. Hile yapmaya açıktır. Unity'de JSON kullanmak için hazır olarak gelen JsonUtility sınıfını kullanıyoruz.
PlayerPrefs ile Veri Saklama ve Geri Çekme Örneği
//Veriyi saklama PlayerPrefs.SetFloat("float", 10.3f); PlayerPrefs.SetInt("integer", 10); PlayerPrefs.SetString("string", "Bu alana string gelecektir"); //Veriyi çekme float veri_float= PlayerPrefs.GetFloat("float"); int veri_integer= PlayerPrefs.GetInt("integer"); string veri_string= PlayerPrefs.GetString("string");
Neden JSON Kullanmalıyız?
- Web servisleri ile kolay iletişim sağlar.
- Esnek ve güvenlidir.
- Dosya boyutu düşüktür.
- Yerelde saklanır.
Gelelim ilk örneğimize. Bu örnekte öncelikle bir Araba sınıfı yaratıyoruz. Daha sonra bu sınıf içinde marka,model,yil değişkenlerini tanımladıktan sonra kurucu metodumuzu yazıyoruz.
public class Araba : MonoBehaviour { public string marka; public string model; public int yil; public Araba(string marka,string model,int yil) { this.marka = marka; this.model = model; this.yil = yil; } }
Sınıfımızı yarattıktan sonra bu sınıfı kullanarak PlayerData üretip JSON tipine dönüştürmek için aşağıdaki sınıfı yazıyoruz.
public class Sınıf: MonoBehaviour { void Start() { Araba yeniaraba = new Araba("BMW","X5",2003); //Burada kurucu metoda parametre yollayarak aracımız ile ilgili bilgileri belirttik. string json = JsonUtility.ToJson(yeniaraba); Debug.Log(json); } }
Bu noktada programımızın çıktısı aşağıdaki gibi olmalıdır.
Burada tıpkı herhangi bir programlama dilinde dosya işlemleri ve pipe işlemlerinde kullanılan Write() ve Read() metodlarını kullanacağız.
Path.Combine fonksiyonu ile persistentDataPath konumdaki kayit.txt dosyasına ulaşacağız. Dosya yoksa yaratacağız ve içine verilerimizi işleyeceğiz. Daha sonra bir başka nesne yaratıp verileri okuyup bu nesneye yazacağız.
void Start() { Araba araba = new Araba("BMW","X5",2003); //Burada kurucu metoda parametre yollayarak aracımız ile ilgili bilgileri belirttik. string json = JsonUtility.ToJson(araba); Write(json); Araba araba2=new Araba("Ford","Focus",2010); Debug.Log("OKUMA ÖNCESİ MARKA:" + araba2.marka); Debug.Log("OKUMA ÖNCESİ MODEL:" + araba2.model); Debug.Log("OKUMA ÖNCESİ YIL:" + araba2.yil); Read(araba2); Debug.Log("OKUMA SONRASI MARKA:"+araba2.marka); Debug.Log("OKUMA SONRASI MODEL:" + araba2.model); Debug.Log("OKUMA SONRASI YIL:" + araba2.yil); } void Write(string kayit) { string dosyaYolu = Path.Combine(Application.persistentDataPath, "kayitlar.txt"); if (!File.Exists(dosyaYolu))//Eğer dosya yoksa yaratıyoruz. { File.Create(dosyaYolu); } File.WriteAllText(dosyaYolu, kayit); } void Read(Araba bilgiler) { string dosyaYolu = Path.Combine(Application.persistentDataPath, "kayitlar.txt"); if (File.Exists(dosyaYolu))//Dosya var mı bakıyoruz { string alinanVeri = File.ReadAllText(dosyaYolu); JsonUtility.FromJsonOverwrite(alinanVeri,bilgiler); } }
Umarım yazımı beğenirsiniz. Bir başka yazıda görüşmek üzere!
Yorumlar
Yorum Gönder