Playerprefs fonksiyonu verilerimizi kalıcı olarak cihaza kaydetmemize yarıyor. Bu da oyunlarımızda paraları, expleri, skorları, oyun ayarlarının ve daha aklıma gelmeyen birçok şeyin tutulmasında işimize yarar.
En çok kullanılan alanı tabi ki oyun ayarlarıdır. En basiti sesin açık veya kapalı olmasını playerprefs ve if döngüsünü kullanarak rahatça ayarlayabilirsiniz
Hızlı ve kullanışlı bir örnekle açıklayayım. Totalscore anahtarıyla kaydedilmiş bir veri var mı? var ise o anahtardaki veriyi al, yoksa o anahtar kelimeye 0 verisini aktar.
if (PlayerPrefs.HasKey("totalscore")) //totalscoreanahtarıyla kaydedilmiş bir veri var mı ? { totalScore = PlayerPrefs.GetInt("totalscore"); // totalscore anahtarıyla kaydedilmiş veriyi getir }else { PlayerPrefs.SetInt("totalscore", 0);// totalscore anahtarına 0 verisini kaydet }
Böylece ne yapmış olduk oyunu ilk açan birisinin cihazında totalscore diye bir veri olmayacağı için skoru 0 olacaktır oyunu oynadıkça yeni skorlar kazanacak oyundan cıkıp girdiginde yine bu kontrol yapılacak ve cihazda bu anahtar kelimeyle bir veri kaydedilmiş olduğu için var olan değeri alıp oyunda kullanacak kullanıcının toplam skoru oyunu kapatıp açtığında sıfırlanmamış olacaktır.
Bir oyun üzerinden açıklayayım.
Bir brekaout oyunu hepimiz oynamışızdır. Altta bir tahtamız ve topumuz olur, topla yukarıdaki blokları kırmaya calısırız. Bloklar bitince bir üst seviyeye geçeriz.
Level 1 sahnesinin scriptinde
function Update () { if(GameObject.FindGameObjectsWithTag("block").Length<1){ // oyunda hiç blok objesi kalmadıysa PlayerPrefs.SetInt("SavedLevel1", 1); //playerprefs fonksiyonuyla 1 olarak kaydettim Debug.Log("SavedLevel = 1"); //bilgilendirme amaçlı ekrana SavedLevel = 1 yazdır Application.LoadLevel("levelsahnesi"); //level sahnesini yükle } }
Menu sahnesinin scriptinde
var levelReached1 : int = 0; //levelReached1 adlı int bir degişken oluşturup 0'a eşitledim levelReached1 =PlayerPrefs.GetInt("SavedLevel1"); //playerprefle level1 sahnesinde kaydettiğim veriyi çektim ve levelReached1'e eşitledim function Update () { if(levelReached1 == 1) //levelReached1=1 e eşitse yani 1. bölümdeki bütün blokları kırdıysa alttakiler olsun { // yapılacaklar } }
PlayerPrefs Fonksiyonları
DeleteAll : Kayıtlı tüm anahtar ve verileri siler
DeleteKey : Belirtilen anahtar ve onunla ilgili veriyi siler
GetFloat : Belirtilen anahtar ile kaydedilmiş float tipindeki veriyi getirir
GetInt : Belirtilen anahtar ile kaydedilmiş integer tipindeki veriyi getirir
GetString : Belirtilen anahtar ile kaydedilmiş string tipindeki veriyi getirir
HasKey : Belirtilen anahtar kayıtlı ise true döndürür
Save : Düzenlenen tüm tercihleri diske yazar
SetFloat : Float tipindeki veriyi belirtilen anahtar ile birlikte saklar
SetInt : Integer tipindeki veriyi belirtilen anahtar ile birlikte saklar
SetString : String tipindeki veriyi belirtilen anahtar ile birlikte saklar
PlayerPrefs kullanımı böyledir peki bu veriler nereye kayıt edilir.
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
sağolun hocam işime yaracaktık kullanmaya çalışıyorum teşekkürler
Tesekkurrler guzel paylasım.
Elinize emeğinize Sağlık Hocam.
Hocam Resetleme ile ilgili Yöntem nedir acaba.
PlayerPrefs.DeleteAll ();
abi sen adamsın yeminlen adamsın yaa allah razı olsun 3-4 saattir bu kayıt işine kafa patlatıyodum
Her Level için ayrı ayrı HighScore tutmak için nasıl bir PlayerPrefs döngüsü kullanmalıyım acaba? Teşekkürler..
bu şekilde kullanabilirsiniz.
public int [] puntaje;
for(int i=0;i