Menu
CoddyTech

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.

challenge icon

Görev

Orta

Yüksek bir puanı BestPoints anahtarı altında sakla.

  1. Start() içinde, ShowBest(); satırının üstüne best = PlayerPrefs.GetInt("BestPoints", 0); yaz.
  2. EndRound() içinde, if (points > best) koşulunun içinde: best = points; olarak ayarla, PlayerPrefs.SetInt ve PlayerPrefs.Save() ile kaydet, ardından ShowBest(); ve newBestText.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

Kendi başına pratik yap: Unity playground