Unıty PlayerPrefs Nedir ?

Sosyal medyada paylaşın

Unity PlayerPrefs Nedir ?

Bu yazıda PlayerPrefs’den bahsedeceğiz.

PlayerPrefs Unity’de küçük miktarda veri depolamaya ve sonradan kullanmaya yarayan bir sınıftır. String, float ve int tipinde verileri saklayabilir. PlayerPrefs işletim sistemine bağlı olarak farklı şekilde depolama yapar.

PlayerPrefs kullanılarak depolanan verilere örnekler;

  • Grafik ayarları
  • Oyuncu skoru
  • Level Id

Bu tarz basit şekilde veriler haricinde PlayerPrefs kullanılması önerilmiyor. Bunun sebebi ise güvenliğinin çok zayıf olması, bir veri tabanı bile olmayıp sınırlarının çok dar olması… gibi.

Nasıl Kullanılır ?

DeleteAllDepolanan tüm anahtar kelimeleri ve değerlerini siler
DeleteKeyBelirtilen anahtarı ve değerini siler
GetFloatEğer varsa fonksiyona verilen anahtar kelimenin değerini getirir
GetIntEğer varsa fonksiyona verilen anahtar kelimenin değerini getirir
GetString Eğer varsa fonksiyona verilen anahtar kelimenin değerini getirir
HasKeyVerilen anahtar PlayerPrefs’te mevcutsa true, aksi takdirde false döndürür.
SaveYapılan tüm değişiklikleri diske kaydeder
SetFloatVerilen anahtar kelimeyi ve değerini kaydeder
SetIntVerilen anahtar kelimeyi ve değerini kaydeder
SetStringVerilen anahtar kelimeyi ve değerini kaydeder

PlayerPrefs Oluşturup Sınıftan Faydalanmak

Set() Methodu

Set() methodu anahtar kelime ve değer olmak üzere iki parametre alır.

PlayerPrefs.Set<VeriTipi>("hash", value);

Sınıftan faydalanmak için script içinde herhangi bir kütüphaneyi entegre etmemiz gerekmiyor. Direkt UnityEngine kütüphanesinde mevcut. Yukarıdaki iskelet şeklinde kodumuzu yazıyoruz.

 PlayerPrefs.SetFloat("floatAnahtar", 0.1f);
 PlayerPrefs.SetInt("intAnahtar", 1);
 PlayerPrefs.SetString("stringAnahtar", "FadeSoftware");

Eğer bu depoladığımız verilerin değerlerini sonradan tekrar değiştirmek istersek tek yapacağımız ikinci parametreyi değiştirmek olacaktır.


Get() Methodu

Set() methodu ile verileri kaydetmeyi öğrendik şimdi ise kaydettiğimiz bu verileri nasıl çekebileceğimize bakalım.

Get() methodu Set()’den farklı olarak sadece saklarken verdiğimiz anahtar kelimeyi ister.

PlayerPrefs.GetFloat("floatAnahtar");
PlayerPrefs.GetInt("intAnahtar");
PlayerPrefs.GetString("stringAnahtar");

Örneğin coin sayısını yukarıdaki örneklerdeki gibi kaydedip ve çekebiliyoruz. Ama nasıl kullanacağız? Veriyi Get() methodu ile çekip bir değişkene atarsak kullanabiliriz. Örneğin;

float x=PlayerPrefs.GetFloat("floatAnahtar");

Delete() Methodları

Depoladığımız verileri silmemiz gerekebilir. Bunun için Delete methodlarını kullanıyoruz. İki farklı methodu vardır.

  • DeleteAll()
  • DeleteKey()
PlayerPrefs.DeleteAll();
PlayerPrefs.DeleteKey("stringAnahtar");

DeleteAll methodu depoladığımız verilerin tümünü istisnasız siler. Örneğin oyununuzu denediniz ve build almaya karar verdiniz. Siz oyunu denerken 100 altın toplamıştınız ama kullanıcının 0’dan başlamasını istiyorsanız bu yöntemi kullanabilirsiniz. Unity build alırken PlayerPrefs verilerini otomatikman temizliyor ama öğretici olsun diye örnek verdim

DeleteKey methodu ise sadece içine parametre olarak verdiğiniz anahtar kelimeyi ve değerini siler.

HasKey() Methodu

HasKey methodu genelde içine verilen string parametrede veri depolanmış mı diye kontrol eder. Eğer varsa true yoksa false döndürür.

 if (PlayerPrefs.HasKey("stringAnahtar"))
 {
     print("Bu anahtar kelimede depolanmış veri mevcut!");
 }

Ben bu methodu oyun içinden ayarlanabilen grafik ayarları için kullanmıştım. Örneğin siz parlaklığı ayarladınız ve oyunu kapatıp açınca aynı değer tekrardan yerini alsın ve ayarlarım sıfırlanmasın istiyorsunuz. Bu durumda HasKey ile veri var mı yok mu diye kontrol ettirip var ise duruma göre işlem yaptırabilirsiniz.

Save() Methodu

PlayerPrefs.Save();

Genelde PlayerPrefs değişikliklerini diske kaydetmek için herhangi bir şey yapmanız gerekmez. Uygulama – oyun kapandığı zaman kendisi otomatik olarak kaydeder. Ancak crash yeme gibi durumları göze alınca bu otomatik sistem pek mantıklı olmuyor gibi. Bazı işlemlerden sonra bu fonksiyonu kullanarak verilerinizi manuel olarak kaydettirebilirsiniz. Örneğin ayarlar menüsünden çıkmak için butona bastığı zaman.

Bonus Bilgi

Kaydettiğiniz verileri silmek için kod ile uğraşmadan farklı bir yöntem daha var. Unity üzerinde “Edit>Clear All PlayerPrefs” derseniz tüm veriler silinecektir. Ben ilk zamanlarımda scriptte PlayerPrefs.DeleteAll(); diyip derlerdim ve tekrar yazdığım kodu silip derlerdim ki kaydedilen veriler silinsin 🙂 Meğerse daha kısa yolu varmış.