Bir Sayı Kaydetme
Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 22 / 56.
Oyun başladığında her alan varsayılan değerinden başlar. 40 mücevher toplayan, oyundan çıkıp ertesi gün geri gelen bir oyuncu mücevher sayısını 0 olarak görür; çünkü oyundan çıkmak oyunu ve içindeki her şeyi sonlandırır. PlayerPrefs, oyunlar arasında küçük değerleri oyuncunun cihazında saklar. Her değer, seçtiğin bir dize olan anahtar altında SetInt, SetFloat veya SetString ile saklanır:
PlayerPrefs.SetString("PlayerName", "Robin");
PlayerPrefs.SetInt("LevelReached", 4);
PlayerPrefs.SetFloat("HoursPlayed", 2.5f);
PlayerPrefs.Save();Bir değeri yeniden okumak için aynı anahtarla aynı türün Get yöntemini çağır. Hiç kaydedilmemiş bir anahtar 0, 0 veya boş bir dize olarak okunur; bu nedenle oyuncunun ilk oyununda bu selamlama boş bir ad ve 0. seviye gösterir:
void Start()
{
string player = PlayerPrefs.GetString("PlayerName");
int level = PlayerPrefs.GetInt("LevelReached");
Debug.Log(player + " is on level " + level);
}Anahtarlar büyük/küçük harfe duyarlıdır: GetInt("levelreached"), hiç kaydedilmemiş bir anahtarı okur ve 0 döndürür. Bir anahtar tek bir tür tutar; bu yüzden onu, Set yöntemiyle eşleşen Get yöntemiyle oku. Bir değeri yalnızca oyun sona erdiğinde değil, değiştiğinde kaydet. Unity, oyun normal şekilde kapandığında PlayerPrefs'i diske yazar; PlayerPrefs.Save() ise bunları hemen yazar, böylece bir çökme onları kaybettiremez. Bir static alan bu durumu aşmanın yolu değildir: oyun çalıştığı sürece varlığını sürdürür ve oyundan çıkmak bunu da sona erdirir.
Görev
OrtaHopper'ın JumpCounter'ı ekranda yaptığı zıplamaları sayar, ancak sayaç basit bir alandır; bu yüzden her yeni oyun tekrar Jumps: 0 ile başlar. Bunu oyundan oyuna devam eden ömür boyu toplam hâline getir:
- Her zıplamadan sonra
jumpsdeğeriniTotalJumpsanahtarı altındaPlayerPrefs.SetIntile kaydet vePlayerPrefs.Save()ile diske yaz. Start()içinde, metin göstermeden önce kaydedilen toplamıjumpsiçine yükle.
Play'e basıp birkaç kez zıpla, ardından Stop'a ve tekrar Play'e bas: sayaç kaldığı yerden devam eder. Sonra Check'e bas.
Kendin dene
using UnityEngine;
using TMPro;
public class JumpCounter : MonoBehaviour
{
public TMP_Text jumpsText;
public float hop = 5f;
private Rigidbody rb;
private int jumps;
void Start()
{
rb = GetComponent<Rigidbody>();
ShowJumps();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb.linearVelocity = Vector3.up * hop;
jumps++;
ShowJumps();
}
}
void ShowJumps()
{
jumpsText.text = "Jumps: " + jumps;
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Gerçek Oyunlar Geliştirmek bölümündeki tüm dersler
1Ekrandaki Metinler
Canvas ve MetinSkoru GösterSayıları BiçimlendirGeri Sayım ZamanlayıcısıTekrar: Hız Göstergesi4Sahneler ve Bölümler
Bir Sahne YüklemeBölümü Yeniden BaşlatmaSonraki BölümSahneler Arasında SaklamaTekrar: Bölüm Seçimi10Proje: 3D Platform Oyunu
ParkurHareketli Platformlar2Düğmeler ve Ekranlar
Düğmeler ve onClickLambda İfadeleriInspector'da Bağlantı KurmaPanelleri Açma ve KapamaCan ÇubuklarıTekrar: Yükseltme Mağazası5PlayerPrefs ile Kaydetme
Bir Sayı KaydetmeVarsayılan Değerle YüklemeEn Yüksek SkorAyarları KaydetmeTekrar: Bankadaki Paralar