Menu
CoddyTech

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.

challenge icon

Sfida

Facile

Il parchimetro fa il conto alla rovescia del tempo pagato. Scrivi il suo Update() in ParkingMeter.cs (la scena collega meterText):

  • timeLeft parte da 75 secondi (impostato nell’Inspector) e diminuisce a ogni frame, senza mai scendere sotto 0.
  • meterText mostra il tempo rimasto in minuti e secondi, arrotondato per eccesso ai secondi interi: da 75 fino a 74.01 mostra 1:15, e con 0.4 secondi rimasti mostra 0:01.
  • Premi Spazio per inserire una moneta: 30 secondi in più, ma mai oltre maxTime (120, che mostra 2: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
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Creare veri giochi