Menu
CoddyTech

Un temporizador de cuenta regresiva

Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 4 de 56.

Una cuenta regresiva mantiene el tiempo restante en un float y le resta Time.deltaTime en cada fotograma. El último fotograma rara vez termina justo en 0, así que Mathf.Max lo detiene ahí, y el final debe ocurrir una sola vez. Esta mecha le da al jugador 5 segundos para desactivar 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 redondea hacia arriba, que es lo que muestra una cuenta regresiva: 5 durante todo el primer segundo (4.99 se redondea a 5), 1 durante el último y 0 solo cuando se acaba el tiempo. (int)fuse reduciría 4.99 a 4 y mostraría 0 durante todo el último segundo mientras la bomba sigue haciendo tictac; Mathf.RoundToInt mostraría 0 durante la última mitad de segundo. Una cuenta regresiva más larga que se muestra en minutos y segundos sigue la misma regla: primero redondea el tiempo hacia arriba a segundos enteros y luego dale formato.

El return anticipado mantiene BOOM en pantalla: sin él, el siguiente fotograma escribiría Fuse: 0 encima. El texto también tiene un color, y fuseText.color = Color.red lo vuelve rojo.

challenge icon

Desafío

Fácil

El parquímetro cuenta atrás el tiempo pagado. Escribe su Update() en ParkingMeter.cs (la escena enlaza meterText):

  • timeLeft empieza en 75 segundos (configurado en el Inspector) y disminuye en cada fotograma, nunca por debajo de 0.
  • meterText muestra el tiempo restante en minutos y segundos, redondeado hacia arriba a segundos enteros: de 75 a 74.01 muestra 1:15, y cuando quedan 0.4 segundos muestra 0:01.
  • La barra espaciadora introduce una moneda: 30 segundos más, pero nunca más de maxTime (120, que muestra 2:00).
  • Al llegar a 0, el texto dice EXPIRED, en rojo (Color.red). A partir de entonces, el parquímetro permanece en 0 y ya no se pueden introducir monedas.

Pulsa Play, introduce unas cuantas monedas y luego pulsa Check.

Pruébalo tú mismo

using UnityEngine;
using TMPro;

public class ParkingMeter : MonoBehaviour
{
    public TMP_Text meterText;
    public float timeLeft = 60f;
    public float maxTime = 120f;

    void Update()
    {
        // Haz una cuenta regresiva de timeLeft y muéstralo en minutos y segundos; Space añade 30 segundos
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Creación de juegos reales