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.
Aufgabe
EinfachDie Parkuhr zählt die bezahlte Zeit herunter. Schreibe ihre Update() in ParkingMeter.cs (die Szene verknüpft meterText):
timeLeftbeginnt bei 75 Sekunden (im Inspector festgelegt) und wird in jedem Frame heruntergezählt, niemals unter 0.meterTextzeigt die verbleibende Zeit in Minuten und Sekunden an, auf ganze Sekunden aufgerundet: Von 75 bis 74.01 wird1:15angezeigt, und bei 0.4 Sekunden Restzeit0:01.- Mit der Leertaste wirfst du eine Münze ein: 30 Sekunden mehr, aber nie mehr als
maxTime(120, was2:00anzeigt). - Bei 0 lautet der Text
EXPIREDund 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
}
}
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
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer4Szenen und Level
Eine Szene ladenDas Level neu startenNächstes LevelZwischen Szenen beibehaltenRückblick: Levelauswahl10Projekt: 3D-Plattformer
Der ParcoursBewegliche Plattformen2Buttons und Bildschirme
Buttons und onClickLambdasVerknüpfungen im InspectorPanels ein- und ausblendenGesundheitsbalkenRückblick: Upgrade-Shop5Speichern mit PlayerPrefs
Eine Zahl speichernMit einem Standardwert ladenHöchstpunktzahlEinstellungen speichernRückblick: Münzen auf der Bank