Un timer per il conto alla rovescia
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 4 di 60.
Un conto alla rovescia mantiene 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 la conclusione deve avvenire 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 mostra un conto alla rovescia: 5 per tutto il primo secondo (4.99 viene arrotondato per eccesso a 5), 1 durante l’ultimo secondo e 0 solo quando il tempo è scaduto. (int)fuse ridurrebbe 4.99 a 4 e mostrerebbe 0 per tutto l’ultimo secondo mentre la bomba continua a ticchettare; Mathf.RoundToInt mostrerebbe 0 nell’ultimo mezzo secondo. Un conto alla rovescia più lungo, mostrato in minuti e secondi, segue la stessa regola: prima arrotonda il tempo per eccesso a secondi interi, poi formatta quei secondi.
Il return anticipato mantiene BOOM sullo schermo: senza di esso, il frame successivo lo sostituirebbe con Fuse: 0. Anche un testo ha un colore e fuseText.color = Color.red lo rende rosso.
Sfida
FacileFai in modo che il parchimetro faccia il conto alla rovescia del tempo pagato.
- In
Update(), sottraiTime.deltaTimedatimeLeft, senza scendere sotto 0, e mostraMathf.CeilToInt(timeLeft)in minuti e secondi:1:15. - La barra spaziatrice aggiunge 30 secondi, fino a
maxTime(2:00). - A 0, mostra
EXPIREDinColor.red. IniziaUpdate()conif (timeLeft == 0f) return;in modo che resti così.
Premi «Gioca» e inserisci monete: si ferma a 2:00. Poi premi «Verifica».
Provalo tu
using UnityEngine;
using TMPro;
public class ParkingMeter : MonoBehaviour
{
public TMP_Text meterText;
public float timeLeft = 60f;
public float maxTime = 120f;
void Update()
{
// Decrementa timeLeft e visualizzalo in minuti e secondi; Space aggiunge 30 secondi
}
}
Tutte le lezioni di Creare veri giochi
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro2Pulsanti 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: Runner infinito
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di inputEsercitati da solo: Playground Unity