Menu
CoddyTech

Höchstpunktzahl

Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 24 von 56.

Ein Highscore ist das beste Ergebnis aller gespielten Partien. Deshalb wird er in PlayerPrefs gespeichert und nur geändert, wenn eine Partie ihn übertrifft. Dieser Flipper überprüft den Highscore, wenn die letzte Kugel verloren geht:

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

Der Vergleich macht den Wert zum Highscore. Ohne ihn würde eine Partie mit 300 nach einem bisherigen Bestwert von 5000 den Wert 300 speichern, und der Rekord wäre verloren. Vergleiche mit dem gespeicherten Bestwert, nicht mit einem Wert, der in jeder Partie bei 0 beginnt: Ein Feld, in das nichts geladen wurde, hat nach jedem Neustart den Wert 0, sodass jeder Punktestand höher ist. score > best behält bei Gleichstand den alten Rekord bei, während score >= best einen Gleichstand als neuen Highscore werten würde.

Um den Highscore während des Spiels anzuzeigen, lade ihn in Start() in ein Feld und zeige dieses Feld an. Wenn eine Partie den Highscore übertrifft, aktualisiere das Feld, PlayerPrefs und den Text gemeinsam, damit der angezeigte und der gespeicherte Wert immer übereinstimmen.

challenge icon

Aufgabe

Mittel

Ballonpumpe: Halte die Leertaste gedrückt, um Luft in den Ballon zu pumpen – 20 Punkte pro Sekunde – und lass los, um die Punkte einzulösen. Pumpst du über 100 hinaus, platzt er und du erhältst 0 Punkte. Das Pumpen, das Platzen und die Punkte sind bereits implementiert, und wenn die Runde endet, wird EndRound() einmal mit der Rundepunktzahl in points aufgerufen. Füge einen Highscore hinzu, der unter dem Schlüssel BestPoints gespeichert wird:

  • Lade in Start() den Bestwert in best (0 für einen neuen Spieler), damit ShowBest() ihn anzeigt.
  • Wenn in EndRound() points den Bestwert übertrifft, speichere den Wert, zeige ihn an und blende newBestText ein. Eine Runde, die den Bestwert nicht übertrifft, ändert nichts.

Drücke Play und pumpe ein paar Ballons auf (Stop und Play starten eine neue Runde), dann Check.

Probier es selbst

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()
    {
        // Speichere hier einen neuen Bestwert
    }

    void ShowBest()
    {
        bestText.text = "Best: " + best;
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Echte Spiele entwickeln