Menu
CoddyTech

Höchstpunktzahl

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

Ein Highscore ist das beste Ergebnis aller gespielten Partien. Er wird daher in PlayerPrefs gespeichert und nur dann geändert, wenn eine Partie ihn übertrifft. Dieser Flipper prüft beim Ablaufen der letzten Kugel:

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 daraus einen Highscore. Ohne ihn würde eine Partie mit 300 Punkten nach einem Bestwert von 5000 den Wert 300 speichern, und der Rekord wäre verloren. Vergleiche mit dem gespeicherten Bestwert und nicht mit etwas, das in jeder Partie bei 0 beginnt: Ein Feld, in das nichts geladen wurde, hat nach jedem Neustart den Wert 0, sodass jeder Punktestand es übertrifft. 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 Bestwert übertrifft, aktualisiere gleichzeitig das Feld, PlayerPrefs und den Text, damit der Bildschirm und der gespeicherte Wert immer übereinstimmen.

challenge icon

Aufgabe

Mittel

Speichere eine Höchstpunktzahl unter dem Schlüssel BestPoints.

  1. Schreibe in Start() oberhalb von ShowBest(); Folgendes: best = PlayerPrefs.GetInt("BestPoints", 0);.
  2. Setze in EndRound() innerhalb von if (points > best) Folgendes: best = points;, speichere den Wert mit PlayerPrefs.SetInt und PlayerPrefs.Save(), rufe dann ShowBest(); und newBestText.SetActive(true); auf.

Drücke auf „Spielen“ und pumpe einen Ballon auf (Leertaste gedrückt halten und loslassen), dann auf Stopp und „Spielen“: Die Höchstpunktzahl bleibt erhalten. Drücke dann auf „Prüfen“.

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;
    }
}

Alle Lektionen in Echte Spiele entwickeln

Übe selbstständig: Unity-Playground