27 Temmuz 2012 Cuma

Unity3D PlayerPrefs Sınıfı

PlayerPrefs sınıfı, oyunlarınızda daha sonra kullanılmak üzere kullanıcı tercihleri ve diğer verileri saklamanızı sağlar.

Aşağıdaki resimler size fikir verebilir.

NPlay - BeGone
All That Matters
Hangi Klasörde Saklanır?
  • Windows :  Registry -> HKCU\Software\[kuruluş_adı]\[ürün_adı]
  • Windows WebPlayer :  %APPDATA%\Unity\WebPlayerPrefs\ [kuruluş_adı]\[ürün_adı]
  • Mac OS X : ~/Library/Preferences/ unity.[company name].[product name].plist
  • Mac OS X WebPlayer : ~/Library/Preferences/Unity/WebPlayerPrefs/ unity.[kuruluş_adı]\[ürün_adı].plist
    Not: Her oyun için ayrı kayıt tutulur.WebPlayer için kayıt limiti 1 mb'dir.Bu limit aşılırsa PlayerPrefsException fırlatır.(try-catch yapısıyla yakalayabilirsiniz.)
PlayerPrefs Sınıfındaki Fonksiyonlar
  • Set Fonksiyonları (Geriye değer döndürmez.)
    • SetInt : İlk parametresinde girilen anahtara 2. parametrede girilen int tipi değeri atar.
    • SetFloat : İlk parametresinde girilen anahtara 2. parametrede girilen float tipi değeri atar.
    • SetString : İlk parametresinde girilen anahtara 2. parametrede girilen string tipi değeri atar.
  • Get Fonksiyonları 
    • GetInt : İlk parametresindeki anahtarın değerini döndürür.(Veri tipi int ise)Eğer yoksa 2. parametrede girilen değeri döndürür.(varsayılan = 0) 
    • GetFloat İlk parametresindeki anahtarın değerini döndürür.(Veri tipi float ise)Eğer yoksa 2. parametrede girilen değeri döndürür. (varsayılan = 0.0f)
    • GetStringİlk parametresindeki anahtarın değerini döndürür.(Veri tipi string ise)Eğer yoksa 2. parametrede girilen değeri döndürür. (varsayılan = "")
  • Diğer Fonksiyonlar (HasKey haricinde değer döndürmez.)
    • HasKey : İlk parametredeki anahtar mevcut ise true, mevcut değilse false döndürür.
    • DeleteKey : İlk parametredeki anahtarı siler.
    • DeleteAll : Tüm anahtarları siler.(Parametre girilmez.)
    • Save : PlayerPrefs sınıfındaki değişiklikleri diske kaydeder.Normalde uygulamadan çıkma esnasında kaydedilir.Bu sebeple aniden çıkış yapıldığı durumlarda kaydedilmez.Diske kaydederken küçük takılmalara sebep olabilir.Bu sebeple oyun oynama esnasında kullanılması tavsiye edilmez.
Örnek Kullanım (C#)




















İpucu (C#) 
Belirli bir anahtardaki PlayerPrefs işlemlerini GetInt/SetInt vb.fonksiyonları yazmadan değişken üzerinden kolayca yapabilirsiniz.

Referans

Herkese merhaba.Unity3D üzerine ilk yazımdı.Biraz çeviri gibi oldu ama.Örnek ve ipucu tamamen bana aittir.Basit oldukları için açıklama yapmadım.Aklınızdaki soruları ve yorumlarınızı bekliyorum.:)
Kolay gelsin...


Yayın tarihi : 26.07.2012 00:26 (Üst sırada gözükmesi için tarih ileri alınmıştır.)

11 yorum:

  1. Çok iyi, sitende başarılar :D

    YanıtlaSil
  2. Çok güzel ve faydalı bir konu devamını bekliyoruz :)

    YanıtlaSil
  3. İlk olarak çok teşekkürler. PlayerPrefs sınıfı ile ilgili olarak Türkçe bir çalışma bulmak gerçekten beni çok mutlu etti . Sizden ricam playerprefs i unlock level için kullanabileceğimiz bir çalışmayı bizimle paylaşabilirmisiniz. Bununla ilgili gerçekten internette az sayıda kaynak var. Olanlar da çok yüzeysel anlatmış. Şimdiden ilgin için çok teşekkürler. Yeni yazılarını bekliyor olacağım.

    YanıtlaSil
    Yanıtlar
    1. @jokers99, @KnGfRhZs yorumlarınız için teşekkürler.

      Örneğe gelicek olursak, çok basit bir yapısı var aslında.Hemen bir örnek hazırladım.Denemedim, umarım çalışır.Belki GUI'si hatalıdır.Ama mantığı anlaman yeterli :)

      int mevcutLevel;

      void Awake(){
      mevcutLevel = PlayerPrefs.GetInt("mevcutLevel", 1);
      }

      void OnGUI(){
      for(int i = 0; i <= 5; i++)
      {
      if (mevcutLevel <= i){
      GUI.enabled = false;
      }
      if(GUILayout.Button("Level" + i)){
      LevelYuklemeFonksiyonu(i);
      }
      }
      }
      void LevelYuklemeFonksiyonu(int levelNo){
      Application.LoadLevel("Level " + levelNo.ToString()); // "Level [levelNo]" adlı sahneyi(scene) yükler.(Build Settings penceresinde scenes in build'de olmalı.)

      Sil
  4. Bu yorum yazar tarafından silindi.

    YanıtlaSil
  5. benim bir ricam olacak ben genel olarak kodlarımı java ile yazıyorum mbu sebepten dolayı paylaşımları hem c hem de java olarak paylaşmamız mümkün mü ?

    YanıtlaSil
    Yanıtlar
    1. malesef bunun için uğraşmak istemiyorum.:)İki dilin syntaxı arasında çok az fark var.Zaten paylaştığım kodların çoğu işin mantığını öğretmeye yönelik.

      Sil
  6. reklam gibi görürsen sil de ben js dersi veriyorum burdan bakabilirsiniz www.unity3dturk.blogspot.com

    YanıtlaSil
  7. Kardeşim Allah razı olsun. İşte olay budur ya. Açıklama yöntemin çok güzel. Gerçekten çok faydalı sağolasın. Ülkemizde böyle olması ne kadar güzel işte bu ya!!!

    YanıtlaSil
  8. Playerprefs ile bir float değişkeni kaydettim. uygulama kapanıp açılınca kaydedilen değişkenin üstüne yeni girilen sayıyı eklemek istiyorum örneğin: 5 kaydedildi bu kaydedilen 5 in üstüne 4 eklemek istiyorum nasıl yaparım

    YanıtlaSil