En Yüksek Skor
Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 24 / 56.
Rekor puan, oynanan her oyunun en iyi sonucudur; bu yüzden PlayerPrefs içinde saklanır ve yalnızca bir oyun bu puanı 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);
}
}Onu rekor puan yapan şey bu karşılaştırmadır. Bu karşılaştırma olmadan, 5000 rekor puanından sonra alınan 300 puanlık bir sonuç kaydedilir ve rekor kaybolur. Kaydedilmiş rekorla karşılaştır; her oyunda 0'dan başlayan bir şeyle değil: yüklenmemiş bir alan her yeniden başlatmada 0 olur, dolayısıyla herhangi bir puan onu geçer. score > best eşitlik durumunda eski rekoru korur; score >= best ise eşitliği yeni bir rekor puan sayar.
Oyun sırasında rekor puanı göstermek için Start() içinde bir alana yükle ve bu alanı göster. Bir oyun rekoru geçtiğinde alanı, PlayerPrefs'i ve metni birlikte güncelle; böylece ekrandaki değer ile kaydedilmiş değer hiçbir zaman birbiriyle çelişmez.
Görev
OrtaBalon Pompası: Balona hava pompalamak için Space tuşunu basılı tut; saniyede 20 puan kazanırsın. Puanları almak için tuşu bırak. 100'ü aşacak kadar pompalarsan balon patlar ve 0 puan alırsın. Pompalama, patlama ve puanlar zaten yazılmıştır; tur sona erdiğinde turun puanıyla birlikte EndRound() bir kez çağrılır; puan points içindedir. BestPoints anahtarıyla kaydedilen bir en yüksek puan ekle:
Start()içinde, en yüksek puanıbestdeğişkenine yükle (yeni oyuncular için 0), böyleceShowBest()bu puanı gösterir.EndRound()içinde,pointsen yüksek puanı geçtiğinde puanı kaydet, göster venewBestTextöğesini göster. En yüksek puanı geçmeyen bir tur hiçbir şeyi değiştirmez.
Play'e bas ve birkaç balon pompalayıp şişir (Stop ve ardından Play yeni bir tur başlatır), sonra Check'e 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 bir en yüksek puanı buraya kaydet
}
void ShowBest()
{
bestText.text = "Best: " + best;
}
}
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