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 ?
| DeleteAll | Depolanan tüm anahtar kelimeleri ve değerlerini siler |
| DeleteKey | Belirtilen anahtarı ve değerini siler |
| GetFloat | Eğer varsa fonksiyona verilen anahtar kelimenin değerini getirir |
| GetInt | Eğer varsa fonksiyona verilen anahtar kelimenin değerini getirir |
| GetString | Eğer varsa fonksiyona verilen anahtar kelimenin değerini getirir |
| HasKey | Verilen anahtar PlayerPrefs’te mevcutsa true, aksi takdirde false döndürür. |
| Save | Yapılan tüm değişiklikleri diske kaydeder |
| SetFloat | Verilen anahtar kelimeyi ve değerini kaydeder |
| SetInt | Verilen anahtar kelimeyi ve değerini kaydeder |
| SetString | Verilen 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ış.
