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.
Desafío
FácilEl parquímetro cuenta atrás el tiempo pagado. Escribe su Update() en ParkingMeter.cs (la escena enlaza meterText):
timeLeftempieza en 75 segundos (configurado en el Inspector) y disminuye en cada fotograma, nunca por debajo de 0.meterTextmuestra el tiempo restante en minutos y segundos, redondeado hacia arriba a segundos enteros: de 75 a 74.01 muestra1:15, y cuando quedan 0.4 segundos muestra0:01.- La barra espaciadora introduce una moneda: 30 segundos más, pero nunca más de
maxTime(120, que muestra2: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
}
}
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
1Texto en pantalla
Canvas y textoMuestra la puntuaciónDa formato a los númerosUn temporizador de cuenta regresivaRepaso: velocímetro4Escenas y niveles
Cargar una escenaReiniciar el nivelSiguiente nivelConservar entre escenasRepaso: selección de nivel10Proyecto: plataformas 3D
El recorridoPlataformas móviles2Botones y pantallas
Botones y onClickLambdasConectar en el InspectorPaneles activados y desactivadosBarras de saludRepaso: tienda de mejoras5Guardar con PlayerPrefs
Guardar un númeroCargar con un valor predeterminadoPuntuación más altaGuardar ajustesRepaso: monedas en el banco3El gestor del juego
Un solo script ejecuta el juegoEl SingletonEstados del juegoActivar el estadoRepaso: gestor de rondas6Proyecto: corredor infinito
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entrada