Menu
CoddyTech

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.

challenge icon

Sfida

Facile

Fai in modo che il parchimetro faccia il conto alla rovescia del tempo pagato.

  1. In Update(), sottrai Time.deltaTime da timeLeft, senza scendere sotto 0, e mostra Mathf.CeilToInt(timeLeft) in minuti e secondi: 1:15.
  2. La barra spaziatrice aggiunge 30 secondi, fino a maxTime (2:00).
  3. A 0, mostra EXPIRED in Color.red. Inizia Update() con if (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

Esercitati da solo: Playground Unity