Menu
CoddyTech

Ein Countdown-Timer

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

Ein Countdown speichert die verbleibende Zeit in einem float und zieht in jedem Frame Time.deltaTime davon ab. Der letzte Frame landet selten genau bei 0, deshalb hält Mathf.Max den Wert dort an, 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 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 sie dann.

Das vorzeitige return lässt BOOM auf dem Bildschirm stehen: Ohne es würde der nächste Frame Fuse: 0 darüber schreiben. Ein Text hat auch eine Farbe, und fuseText.color = Color.red färbt ihn rot.

challenge icon

Aufgabe

Einfach

Die Parkuhr zählt die bezahlte Zeit herunter. Schreibe ihre Update() in ParkingMeter.cs (die Szene verknüpft meterText):

  • timeLeft beginnt bei 75 Sekunden (im Inspector festgelegt) und wird in jedem Frame heruntergezählt, niemals unter 0.
  • meterText zeigt die verbleibende Zeit in Minuten und Sekunden an, auf ganze Sekunden aufgerundet: Von 75 bis 74.01 wird 1:15 angezeigt, und bei 0.4 Sekunden Restzeit 0:01.
  • Mit der Leertaste wirfst du eine Münze ein: 30 Sekunden mehr, aber nie mehr als maxTime (120, was 2:00 anzeigt).
  • Bei 0 lautet der Text EXPIRED und ist rot (Color.red). Danach bleibt die Parkuhr bei 0, und es können keine Münzen mehr eingeworfen werden.

Drücke Play, wirf ein paar Münzen ein und klicke dann auf Check.

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