En Yüksek Skor
Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 24 / 60.
Yüksek skor, oynanan her oyundaki en iyi sonuçtur; bu yüzden PlayerPrefs içinde saklanır ve yalnızca bir oyun bu skoru geçtiğinde değişir. Bu langırt masası, son top boşaldığında kontrol eder:
void GameOver()
{
int best = PlayerPrefs.GetInt("PinballBest", 0);
if (score > best)
{
PlayerPrefs.SetInt("PinballBest", score);
PlayerPrefs.Save();
Debug.Log("New high score: " + score);
}
}Yüksek skoru belirleyen şey karşılaştırmadır. Bu olmadan, en iyi skor 5000 iken alınan 300 puanlık bir skor 300 olarak kaydedilir ve rekor kaybolur. Kaydedilmiş en iyi skorla karşılaştır; her oyunda 0'dan başlayan bir değerle değil: yüklenmemiş bir alan her yeniden başlatmada 0 olur, dolayısıyla her skor onu geçer. score > best eşitlik durumunda eski rekoru korurken score >= best eşitliği yeni bir yüksek skor sayar.
Oyun sırasında yüksek skoru göstermek için, Start() içinde bu değeri bir alana yükle ve o alanı göster. Bir oyun bu skoru geçtiğinde alanı, PlayerPrefs'i ve metni birlikte güncelle; böylece ekrandaki değer ile kaydedilen değer hiçbir zaman uyuşmazlık göstermez.
Görev
OrtaYüksek bir puanı BestPoints anahtarı altında sakla.
Start()içinde,ShowBest();satırının üstünebest = PlayerPrefs.GetInt("BestPoints", 0);yaz.EndRound()içinde,if (points > best)koşulunun içinde:best = points;olarak ayarla,PlayerPrefs.SetIntvePlayerPrefs.Save()ile kaydet, ardındanShowBest();venewBestText.SetActive(true);çağrılarını yap.
“Oyna” düğmesine bas ve bir balonu pompalayıp şişir (Space tuşunu basılı tut, sonra bırak), ardından “Durdur” ve “Oyna” düğmelerine bas: en yüksek puan korunur. Sonra “Kontrol et” düğmesine bas.
Kendin dene
using UnityEngine;
using TMPro;
public class BalloonPump : MonoBehaviour
{
public TMP_Text pointsText;
public TMP_Text bestText;
public GameObject newBestText;
public float pumpRate = 20f;
private float air;
private int points;
private int best;
private bool roundOver;
void Start()
{
ShowBest();
}
void Update()
{
if (roundOver) return;
if (Input.GetKey(KeyCode.Space))
{
air += pumpRate * Time.deltaTime;
transform.localScale = Vector3.one * (1f + air / 50f);
pointsText.text = "Points: " + Mathf.FloorToInt(air);
if (air > 100f)
{
points = 0;
pointsText.text = "Pop! Points: 0";
GetComponent<Renderer>().enabled = false;
roundOver = true;
EndRound();
}
}
else if (Input.GetKeyUp(KeyCode.Space))
{
points = Mathf.FloorToInt(air);
pointsText.text = "Points: " + points;
roundOver = true;
EndRound();
}
}
void EndRound()
{
// Yeni en yüksek puanı burada kaydet
}
void ShowBest()
{
bestText.text = "Best: " + best;
}
}
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östergesi2Düğ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 ParalarKendi başına pratik yap: Unity playground