Un timer per il conto alla rovescia
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 4 di 56.
Un conto alla rovescia memorizza il tempo rimanente in un float e sottrae Time.deltaTime a ogni frame. L’ultimo frame raramente arriva esattamente a 0, quindi Mathf.Max lo ferma lì, e l’evento finale deve verificarsi una sola volta. Questa miccia dà al giocatore 5 secondi per disinnescare una bomba:
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 arrotonda per eccesso, proprio come viene visualizzato un conto alla rovescia: 5 per tutto il primo secondo (4.99 viene arrotondato a 5), 1 durante l’ultimo secondo e 0 solo quando il tempo è scaduto. (int)fuse arrotonderebbe 4.99 a 4 e mostrerebbe 0 per tutto l’ultimo secondo mentre la bomba sta ancora ticchettando; Mathf.RoundToInt mostrerebbe 0 per l’ultima metà del secondo. Un conto alla rovescia più lungo, visualizzato in minuti e secondi, segue la stessa regola: prima arrotonda il tempo per eccesso ai secondi interi, poi formattali.
Il return anticipato mantiene BOOM sullo schermo: senza di esso, il frame successivo lo sovrascriverebbe con Fuse: 0. Anche un testo ha un colore e fuseText.color = Color.red lo rende rosso.
Sfida
FacileIl parchimetro fa il conto alla rovescia del tempo pagato. Scrivi il suo Update() in ParkingMeter.cs (la scena collega meterText):
timeLeftparte da 75 secondi (impostato nell’Inspector) e diminuisce a ogni frame, senza mai scendere sotto 0.meterTextmostra il tempo rimasto in minuti e secondi, arrotondato per eccesso ai secondi interi: da 75 fino a 74.01 mostra1:15, e con 0.4 secondi rimasti mostra0:01.- Premi Spazio per inserire una moneta: 30 secondi in più, ma mai oltre
maxTime(120, che mostra2:00). - A 0 il testo diventa
EXPIRED, in rosso (Color.red). Da quel momento il parchimetro rimane a 0 e non è più possibile inserire monete.
Premi Play, inserisci alcune monete, poi premi Check.
Provalo tu
using UnityEngine;
using TMPro;
public class ParkingMeter : MonoBehaviour
{
public TMP_Text meterText;
public float timeLeft = 60f;
public float maxTime = 120f;
void Update()
{
// Fai diminuire timeLeft e visualizzalo in minuti e secondi; Space aggiunge 30 secondi
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Creare veri giochi
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro4Scene e livelli
Caricare una scenaRiavviare il livelloLivello successivoMantenere i dati tra le sceneRiepilogo: selezione del livello10Progetto: Platform 3D
Il percorsoPiattaforme mobili2Pulsanti e schermate
Pulsanti e onClickLambdaCollegare nell'InspectorPannelli attivi e disattiviBarre della saluteRiepilogo: negozio degli upgrade5Salvare con PlayerPrefs
Salvare un numeroCaricare con un valore predefinitoPunteggio massimoSalvare le impostazioniRiepilogo: monete in banca8Controller del personaggio
CharacterController.MoveGravità manualeSaltoSpingere gli oggettiMuoviti dove guardiRiepilogo: doppio salto3Il gestore del gioco
Uno script gestisce il giocoIl SingletonStati di giocoSelezionare lo statoRiepilogo: gestore del round6Progetto: Corsa infinita
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di input