Menu
CoddyTech

Najlepszy wynik

Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 24 z 56.

Najlepszy wynik to najlepszy rezultat ze wszystkich rozegranych gier, dlatego jest przechowywany w PlayerPrefs i zmienia się tylko wtedy, gdy gra przyniesie lepszy wynik. Ten stół do pinballa sprawdza wynik, gdy ostatnia kula wpada do odpływu:

void GameOver()
{
    int best = PlayerPrefs.GetInt("PinballBest", 0);
    if (score > best)
    {
        PlayerPrefs.SetInt("PinballBest", score);
        PlayerPrefs.Save();
        Debug.Log("New high score: " + score);
    }
}

To porównanie sprawia, że jest to najlepszy wynik. Bez niego gra z wynikiem 300 po wcześniejszym najlepszym wyniku 5000 zapisałaby 300, a rekord zostałby utracony. Porównuj wynik z zapisanym najlepszym wynikiem, a nie z wartością, która zaczyna się od 0 w każdej grze: pole, do którego niczego nie wczytano, po każdym ponownym uruchomieniu ma wartość 0, więc każdy wynik będzie od niego lepszy. score > best zachowuje dotychczasowy rekord w przypadku remisu, natomiast score >= best uznałoby remis za nowy najlepszy wynik.

Aby wyświetlać najlepszy wynik podczas gry, wczytaj go do pola w Start() i wyświetl wartość tego pola. Gdy gra przyniesie lepszy wynik, zaktualizuj jednocześnie pole, PlayerPrefs i tekst, aby wartość na ekranie nigdy nie różniła się od zapisanej.

challenge icon

Wyzwanie

Średni

Balonowa pompka: przytrzymaj spację, aby pompować powietrze do balonu, zdobywając 20 punktów na sekundę, a następnie puść, aby zatwierdzić punkty. Jeśli napompujesz balon powyżej 100, pęknie, a ty zdobędziesz 0 punktów. Pompowanie, pęknięcie i punkty są już obsługiwane, a po zakończeniu rundy EndRound() jest wywoływane raz, z wynikiem rundy w points. Dodaj rekord, zapisywany pod kluczem BestPoints:

  • W Start() wczytaj rekord do best (0 dla nowego gracza), aby ShowBest() go wyświetlało.
  • W EndRound(), gdy points pobije rekord, zapisz go, wyświetl i pokaż newBestText. Runda, w której nie uda się pobić rekordu, niczego nie zmienia.

Naciśnij Play i napompuj kilka balonów (Stop, a następnie Play, aby rozpocząć nową rundę), a potem naciśnij Check.

Spróbuj swoich sił

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()
    {
        // Zapisz tutaj nowy rekord
    }

    void ShowBest()
    {
        bestText.text = "Best: " + best;
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier