Menu
CoddyTech

Bester Lauf

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

challenge icon

Aufgabe

Mittel

Letzter Schritt: Merke dir den besten Lauf. Behalte alles aus den vorherigen Lektionen bei. Die Canvas enthält oben rechts ein BestText und das Panel ein ausgeblendetes NewBestText (New best!); die Szene weist sie zwei neuen Feldern von GameManager zu: public TMP_Text bestText; und public GameObject newBestText;. Speichere den Bestwert unter dem Schlüssel BestRun in ganzen Metern:

  • Lade in Start() den Bestwert (0 für einen neuen Spieler) und zeige ihn als Best: 57 m an.
  • Wenn die ganzen Meter des Laufs, Mathf.FloorToInt(distance), den Bestwert übertreffen, speichere in GameOver() den neuen Bestwert, zeige ihn an und blende newBestText ein. Ein kürzerer Lauf ändert nichts.

Der Bestwert bleibt bei „Run again“ und auch nach dem Beenden des Spiels erhalten. Drücke Play, stelle einen Bestwert auf und versuche, ihn zu übertreffen, dann drücke Check.

Probier es selbst

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using TMPro;

public enum GameState { Playing, GameOver }

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public float speed = 10f;
    public float speedUp = 0.5f;
    public float maxSpeed = 20f;
    public TMP_Text distanceText;
    public GameObject gameOverPanel;
    public Button restartButton;
    public GameState state = GameState.Playing;
    private float distance;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        restartButton.onClick.AddListener(Restart);
    }

    void Update()
    {
        if (state != GameState.Playing) return;

        speed = Mathf.Min(speed + speedUp * Time.deltaTime, maxSpeed);
        distance += speed * Time.deltaTime;
        distanceText.text = "Distance: " + Mathf.FloorToInt(distance) + " m";
    }

    public void GameOver()
    {
        state = GameState.GameOver;
        speed = 0f;
        gameOverPanel.SetActive(true);
    }

    void Restart()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }
}

Alle Lektionen in Echte Spiele entwickeln