UNITY – PlayerPrefs Kullanımı
Oyun geliştiriyor ve oturumlar/sessions ya da bölümler/levels arasında geçiş yaparken verilerin kaybolmasını istemiyorsanız PlayerPrefs kullanabilirsiniz.
PlayerPrefs, oyuncu için özelleştirilmiş/oyuncuya ait verileri saklamanıza ve daha sonra bu verilere erişmenize olanak tanır.
Tüm Veri Tipleri İçin Kullanabilir Miyim ?
Hayır. PlayerPrefs ile String, Float ve Integer tiplerinde veriler saklanabilir.
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
Nasıl Kullanırım ?
PlayerPrefs ile veri saklama işlemi için bir veri ve bu veri için belirlediğiniz bir anahtarınız/key olmalı.
Örneğin; diyelim ki oyuncunun kazandığı skorları toplamak ve oturum ya da bölüm değişikliğinde kaybolmamak üzere bu toplam skoru kaydetmek istiyoruz. PlayerPrefs mantığını öğrenmek için skor verisini kullanıcıdan aldığımız aşağıdaki basit ekran üzerinden inceleyelim;
Bu örnekte PlayerPrefs ile kayıt altına alınacak “toplam skor verisi” için “totalScore” değişkenini ve “totalScoreKey” anahtarını kullanalım.
Veri saklama işlemleri için oluşturduğumuz “SaveScore” scripti;
public class SaveScore : MonoBehaviour { int totalScore; // toplam skor verisi Text scoreTxt; // toplam skor bilgisinin ekrana yazıldığı Text objesi int newScore; // girilen yeni skor verisi }
Kullanıcı skor verisini girip “Save” butonuna tıkladığında, yine “SaveScore” scriptindeki “Score” fonksiyonu devreye girer;
public void Score() { newScore = 0; InputField scoreInput = GameObject.Find("ScoreInput").GetComponent<InputField>(); // kullanıcıdan alınan skor bilgisi için kullanılan InputField newScore = Convert.ToInt32(scoreInput.text); if (PlayerPrefs.HasKey("totalScoreKey")) //totalScoreKey anahtarıyla kaydedilmiş bir veri var mı ? { totalScore = PlayerPrefs.GetInt("totalScoreKey"); // totalScoreKey anahtarıyla kaydedilmiş veriyi getir Debug.Log("PlayerPrefs has totalScoreKey"); }else { Debug.Log("There is no totalScoreKey"); } totalScore += newScore; PlayerPrefs.SetInt("totalScoreKey", totalScore); // totalScoreKey anahtarıyla totalScore verisini sakla scoreInput.text = ""; scoreTxt.text = "Total Score \n " + totalScore.ToString(); }
Bu sayede toplam skor verisi/totalScore, PlayerPrefs kullanılarak saklandığı için oturum ya da bölüm değişikliklerinde kaybolmamış olur.
PlayerPrefs kullanarak kaydettiğimiz bu verileri silmek istediğimizde, “Reset” butonu ile çalışacak “ResetScore” fonksiyonu;
public void ResetScore() { PlayerPrefs.DeleteAll(); // Kayıtlı tüm anahtar ve verileri siler totalScore = 0; Debug.Log("The score was reset!"); }
PlayerPrefs ile ilgili detaylı bilgiye ulaşmak isterseniz burayı ziyaret edebilirsiniz.
Kemal
23 Nisan 2018Çok teşekkürler :)
realGamer
1 Mart 2019Oldukça faydalı bir içerik oluşturmuşsunuz. Tebrikler !
Setenay Ceren Ağdaş
27 Mart 2019Yorumunuz için teşekkürler.
Altan
8 Nisan 2019Güzel Paylaşım Olmuş Peki her Level için ayrı skor kaydı almak için nasıl bir döngü yapmam lazım. Teşekkürler
Setenay Ceren Ağdaş
9 Nisan 2019SetString, GetString ve Json Serialization kullanarak yazabilirsiniz. Json Serialization için bu linki takip edebilirsiniz.
Altan
11 Nisan 2019Teşekkürler..
Setenay Ceren Ağdaş
12 Nisan 2019Rica ederim.
Semih
26 Nisan 2020Teşekkürler, sade temiz anlatım olmuş.
Setenay Ceren Ağdaş
30 Nisan 2020Yorumunuz için teşekkürler.
Yaşam
18 Ocak 2021Gayet sade ve güzel bir anlatım olmuş.
Setenay Ceren Ağdaş
19 Ocak 2021Yorumunuz için teşekkürler :)
ahmet
12 Mart 2023Mekemmel Ötesi Şahane olmuş......