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 60.

Una cuenta regresiva guarda el tiempo restante en un float y le resta Time.deltaTime en cada fotograma. El último fotograma rara vez termina exactamente 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 segundo 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 tic tac; 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. Un texto también tiene color, y fuseText.color = Color.red lo vuelve rojo.

challenge icon

Desafío

Fácil

Haz que el parquímetro descuente el tiempo pagado.

  1. En Update(), resta Time.deltaTime a timeLeft, sin bajar de 0, y muestra Mathf.CeilToInt(timeLeft) en minutos y segundos: 1:15.
  2. La barra espaciadora añade 30 segundos, hasta maxTime (2:00).
  3. Al llegar a 0, muestra EXPIRED en Color.red. Empieza Update() con if (timeLeft == 0f) return; para que se mantenga así.

Pulsa «Jugar» y échale monedas: se detiene en 2:00. Después, pulsa «Comprobar».

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
    }
}

Todas las lecciones de Creación de juegos reales

Practica por tu cuenta: Playground de Unity