Menu
CoddyTech

Ein Countdown-Timer

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

Ein Countdown speichert die verbleibende Zeit in einem float und zieht in jedem Frame Time.deltaTime davon ab. Der letzte Frame endet selten genau bei 0, daher stoppt Mathf.Max den Wert dort, und das Ende muss genau einmal eintreten. Diese Zündschnur gibt dem Spieler 5 Sekunden, um eine Bombe zu entschärfen:

public TMP_Text fuseText;
public float fuse = 5f;
private bool exploded;

void Update()
{
    if (exploded)
    {
        return;
    }

    fuse = Mathf.Max(fuse - Time.deltaTime, 0f);
    fuseText.text = "Fuse: " + Mathf.CeilToInt(fuse);

    if (fuse == 0f)
    {
        exploded = true;
        fuseText.text = "BOOM";
        fuseText.color = Color.red;
    }
}

Mathf.CeilToInt rundet auf, was genau das ist, was ein Countdown anzeigt: 5 während der gesamten ersten Sekunde (4.99 wird auf 5 aufgerundet), 1 während der letzten Sekunde und 0 erst, wenn die Zeit abgelaufen ist. (int)fuse würde 4.99 auf 4 abrunden und während der gesamten letzten Sekunde 0 anzeigen, obwohl die Bombe noch tickt; Mathf.RoundToInt würde während der letzten halben Sekunde 0 anzeigen. Für einen längeren Countdown, der in Minuten und Sekunden angezeigt wird, gilt dieselbe Regel: Runde zuerst die Zeit auf ganze Sekunden auf und formatiere diese dann.

Das vorzeitige return lässt BOOM auf dem Bildschirm stehen: Ohne es würde im nächsten Frame Fuse: 0 darübergeschrieben. Auch ein Textfeld hat eine Farbe, und fuseText.color = Color.red färbt es rot.

challenge icon

Aufgabe

Einfach

Lass die Parkuhr die bezahlte Zeit herunterzählen.

  1. Ziehe in Update() Time.deltaTime von timeLeft ab, ohne unter 0 zu gehen, und zeige Mathf.CeilToInt(timeLeft) als Minuten und Sekunden an: 1:15.
  2. Mit der Leertaste werden 30 Sekunden hinzugefügt, bis höchstens maxTime (2:00).
  3. Bei 0 zeige EXPIRED in Color.red an. Beginne Update() mit if (timeLeft == 0f) return;, damit es so bleibt.

Drücke „Spielen“ und wirf Münzen ein: Die Zeit bleibt bei 2:00 stehen. Drücke dann „Prüfen“.

Probier es selbst

using UnityEngine;
using TMPro;

public class ParkingMeter : MonoBehaviour
{
    public TMP_Text meterText;
    public float timeLeft = 60f;
    public float maxTime = 120f;

    void Update()
    {
        // Zähle timeLeft herunter und zeige die verbleibende Zeit in Minuten und Sekunden an; Space fügt 30 Sekunden hinzu
    }
}

Alle Lektionen in Echte Spiele entwickeln

Übe selbstständig: Unity-Playground