Unity PlayerPrefs Nedir? Nasıl Kullanılır?

Unity PlayerPrefs Nedir? Nasıl Kullanılır?

Unity PlayerPrefs Nedir? Nasıl Kullanılır?

 Hepinize merhaba arkadaşlar bu yazımda sizlere Unity de bulunan PlayerPrefs özelliğinden bahsedeceğim, iyi okumalar.

PlayerPrefs Nedir?

PlayerPrefs Basit düzeyde veri depolamamızı, kaydetmemizi sağlayan bir yapıdır. Tabi daha sonra bu kaydettiğimiz verileri istediğimiz yerde çekip tekrar kullanabiliyoruz.

PlayerPrefs genel olarak basit düzeydeki verileri depolamak için kullanırız. Bunlara örnek vermem gerekir ise;

  1. High Score (Yüksek puan) sayısını tutmak.
  2. Altın sayısını tutmak
  3. Bir sahneden diğerine geçtiğimizde scriptten bağımsız bir şekilde veriyi çekmek.
Yukarıda saydığım örneklerde PlayerPrefs kullanılabilir, aslında bunların yanı sıra daha bir çok şey için de kullanılabilir ancak basit işlemlerde kullanmanızı öneririm. Çünkü PlayerPrefs normal bir veri tabanı değildir bu yüzden sınırları vardır ve çok büyük değerler için oyununuzun çökmesi ile sonuçlanabilir.

PlayerPrefs ile "Int", "Float" ve "String" değerleri tutabilir ve düzenleyebilirsiniz.

PlayerPrefs Nasıl Kullanılır?

Set Metotları - PlayerPrefs Oluşturma ve Düzenleme

Bir PlayerPrefs i oluşturmak ve düzenlemek için aynı metotu kullanıyoruz. 
PlayerPrefs.Set<VeriTipi>("hash", value);

Nasıl kullanıldığına örnek vermem gerekir ise aşağıdaki kodları inceleyelim.

        PlayerPrefs.SetFloat("floatPP", 1.2f); // Flaot tipinde bir PlayerPrefs oluşturduk.
        PlayerPrefs.SetInt("integerPP", 10); // Int tipinde bir PlayerPrefs oluşturduk.
        PlayerPrefs.SetString("stringPP", "UrhobA"); // String tipinde bir PlayerPrefs oluşturduk.
  

Bunları düzenlemek isteseydik yine aynı şekilde düzenlemek istediğimiz verinin değerini değiştirip yazacaktık. Örneğin;

        PlayerPrefs.SetFloat("floatPP", 99.99f); // Flaot tipinde bir PlayerPrefs oluşturduk.
        PlayerPrefs.SetInt("integerPP", 99); // Int tipinde bir PlayerPrefs oluşturduk.
        PlayerPrefs.SetString("stringPP", "www.urhoba.net"); // String tipinde bir PlayerPrefs oluşturduk.
  

Save() Metodu - PlayerPrefs Diske Yazma

PlayerPrefs verilerimizi kontrollü(güvenli) bir şekilde kaydetmek için bu metodu kullanıyoruz.
PlayerPrefs.Save();

Neden Save() metodunu kullanmalıyım diye merak ettiğinizi düşünüyorum ve hemen açıklıyorum.

Unity PlayerPrefs ile kaydedilen verileri  "OnApplicationQuit()" fonksiyonu çağırıldığı zaman diske yazar yani oyundan çıkış yapılmadan hemen önce veriler diske kaydedilir.

Oyundan beklenmedik bir şekilde çıkılması durumunda (Çökme, telefonun şarjının bitmesi vb...) o ana kadar olan veriler diske yazılmayacağı için veriler kaybolacaktır bunu önlemek için Save() metodunu kullanıyoruz.

Kullanımına örnek vermem gerekir ise yukarıdaki set metotlarının hemen altında kullanabiliriz.

        
	PlayerPrefs.SetFloat("floatPP", 1.2f); // Flaot tipinde bir PlayerPrefs oluşturduk.
        PlayerPrefs.SetInt("integerPP", 10); // Int tipinde bir PlayerPrefs oluşturduk.
        PlayerPrefs.SetString("stringPP", "UrhobA"); // String tipinde bir PlayerPrefs oluşturduk.
        PlayerPrefs.Save(); // Verileri diske yazdırdık.
  

Get Metotları - PlayerPrefs Verisini Okuma

Şimdiye kadar verilerimizi oluşturduk, düzenledik ve diske kaydetmeyi öğrendik gelin bir de bu oluşturduğumuz verileri nasıl çekeceğimize bakalım.
Verileri çekmek için aşağıdaki gibi metodumuzu çağırıyoruz.
PlayerPrefs.Get<VeriTipi>("hash");

Aynı set metodu kullanır gibi tek farkı vurada "Set" yerine "Get" olarak yazıyoruz ve artık "value" kısmına bir şey yazmıyoruz. Hadi gelin kod ile nasıl kullandığımıza bir bakalım.

        Debug.Log(PlayerPrefs.GetFloat("floatPP").ToString()); // Float bir değeri konsola yazdırdık.
        Debug.Log(PlayerPrefs.GetInt("integerPP").ToString()); // Int bir değeri konsola yazdırdık.
        Debug.Log(PlayerPrefs.GetString("stringPP")); // String bir değeri konsola yazdırdık.

        float floatDeger = PlayerPrefs.GetFloat("floatPP"); // Float bir değeri float bir değişkene aktardık.
        int intDeger = PlayerPrefs.GetInt("integerPP"); // Int bir değeri int bir değişkene aktardık.
        string stringDeger = PlayerPrefs.GetString("stringPP"); String bir değeri string bir değişkene aktardık.
      

Delete Metotları - PlayerPrefs Verileri Silme İşlemi 

Bu kadar veriyi oluşturduk ve oyunun ilerleyen durumlarında bu verileri silmemiz gerekti peki bunu nasıl yapacağız? 
Verileri silmek için aslında bir çok yol bulunuyor, Set Metotlarını kullanarak değerleri 0 yapabilirsiniz ancak bu kullanışlı değildir, bu durum için Unity bize 2 adet "Delete" metotu sunuyor.
  1. DeleteAll();
  2. DeleteKey("hash");
Hadi bunları nasıl kullanacağız inceleyelim.

DeleteAll() - Tüm PlayerPrefsleri Silmek

Tüm PlayerPrefs verilerini silmek için kullandığımız metottur.
PlayerPrefs.DeleteAll();

Nasıl kullanılacağını kod ile incelememiz gerekir ise; 

                
       	PlayerPrefs.SetFloat("floatPP", 1.2f);
        PlayerPrefs.SetInt("integerPP", 10);
        PlayerPrefs.SetString("stringPP", "UrhobA");

        PlayerPrefs.DeleteAll(); // Oluşturduğumuz tüm PlayerPrefs verileri silindi.
        

DeleteKey("hast") - Tek Bir PlayerPrefs Verisini Silmek

Sadece silmek istediğimiz verilerin hash / key değerlerini girip sildiğimiz metottur.
PlayerPrefs.DeleteKey("hash");
Şeklinde kullanılır, hadi gelin kod ile nasıl kullanıldığını inceleyelim.

       	PlayerPrefs.SetFloat("floatPP", 1.2f);
        PlayerPrefs.SetInt("integerPP", 10);
        PlayerPrefs.SetString("stringPP", "UrhobA");

        PlayerPrefs.DeleteKey("floatPP"); // "floatPP" isimli PlayerPrefs silindi.
        PlayerPrefs.DeleteKey("stringPP"); // "stringPP" isimli PlayerPrefs silindi.

PlayerPrefs ile Bool Kontrolü Yapmak

PlayerPrefsler bildiğiniz gibi sadece 3 farklı veri tipini depolamakta kullanılıyor ve bool değer döndürmemize olanak vermiyor. Yazacağımız ufak bir kaç fonksiyon ile PlayerPrefs ile bool verisi kaydetmeyi sağlayabiliriz.

    void Start()
    {
        PlayerPrefsSetBool("boolDeneme", false); // Bool olarak PlayerPrefsimizi kaydediyoruz.
        bool durum = PlayerPrefsGetBool("boolDeneme"); // Bool olarak PlayerPrefsimizi çekiyoruz.
        Debug.Log(durum.ToString()); // Çektiğimiz veriyi konsola yazıdırıyoruz.
    }

    bool PlayerPrefsGetBool(string hash) // Veriyi çekmek için olan fonksiyonumuzu yazıyoruz.
    {
        bool durum = (PlayerPrefs.GetInt(hash) == 0) // ternary if ile int değerinde veri çekip, çekilen veri 0 ise false, değil ise 1 true olarak döndürüyoruz.
            ? false
            : true;
        return durum;
    }

    void PlayerPrefsSetBool(string hash, bool value) // Veriyi kaydetmek için olan fonksiyonumuzu yazıyoruz.
    {
        int deger = (value == false) // Gelen veri false ise 0, değil ise 1 olarak değer döndürüyoruz.
            ? 0
            : 1;
        PlayerPrefs.SetInt(hash, deger); // Döndürdüğümüz sayısal değeri Int değerinde PlayerPrefs olarak ekliyoruz.
    }

Evet arkadaşlar PlayerPrefslerin kullanımları da bu şekildedir. PlayerPrefsler ile ilgili merak ettiğiniz herhangi bir şey olursa aşağıdaki yorumlar kısmından bana sorabilirsiniz.