How do I set a timer in Unity?

Crea un Temporizador de Cuenta Atrás en Unity

09/07/2025

Valoración: 4.35 (9626 votos)

Los temporizadores son un elemento fundamental en el diseño de videojuegos. Ya sea para una carrera contrarreloj, el enfriamiento de una habilidad o un evento de tiempo limitado, saber cómo implementar una cuenta regresiva es una habilidad esencial para cualquier desarrollador en Unity. Aunque la lógica de contar hacia atrás puede parecer simple, mostrar ese tiempo en un formato familiar para el jugador, como minutos y segundos, presenta sus propios desafíos.

What is simple timer in Unity?

En este artículo, te guiaremos a través de todo el proceso para crear un temporizador de cuenta regresiva robusto y preciso en Unity. Cubriremos desde el script básico hasta el formato de visualización profesional, asegurándonos de que tu temporizador no solo funcione a la perfección, sino que también se vea genial. ¡Vamos a empezar!

Índice de Contenido

La Lógica Fundamental: Contando Hacia Atrás con Time.deltaTime

El corazón de cualquier temporizador en Unity es una variable de tipo float que almacena el tiempo restante. Para que este valor disminuya de manera consistente y precisa, independientemente de la potencia del ordenador o la tasa de fotogramas (FPS) del juego, utilizamos Time.deltaTime. Esta propiedad representa el tiempo en segundos que tardó en completarse el último fotograma.

Al restar Time.deltaTime de nuestra variable de tiempo en cada fotograma a través del método Update(), nos aseguramos de que el temporizador descuente un segundo real por cada segundo que pasa en el mundo real.

How do I add a timer to a game object?
Create an Empty game object and name it as Timer. To add the UI text. Click on the + sign in the hierarchy window and go to UI>Text-TextMeshPro. Select the Timer game object and click on Add Component in the inspector window. Add a new script and call it “example_timer”. Open the script in your code editor.

El script más básico se vería así:

 using UnityEngine; public class Temporizador: MonoBehaviour { public float tiempoRestante = 60; // 60 segundos para empezar void Update() { if (tiempoRestante > 0) { tiempoRestante -= Time.deltaTime; } } } 

Este código es el punto de partida. Mientras haya tiempo restante, este se irá reduciendo en cada fotograma.

¿Qué Pasa Cuando el Tiempo se Acaba?

Un temporizador no es muy útil si no ocurre nada cuando llega a cero. Necesitamos una forma de ejecutar una acción, como terminar el nivel o mostrar un mensaje de "Game Over". La forma más sencilla es usar una condición else.

 if (tiempoRestante > 0) { tiempoRestante -= Time.deltaTime; } else { Debug.Log("¡El tiempo se ha acabado!"); } 

Sin embargo, esto presenta un problema: el código dentro del bloque else se ejecutará en cada fotograma una vez que el tiempo se haya agotado. Para evitar esto y tener un control más preciso sobre el estado del temporizador (por ejemplo, para poder pausarlo), introducimos una variable booleana.

What is simple timer in Unity?
This is the first part of the multi-part series on Simple timer in Unity. You can find part 2 here. When we say timer, we generally think of a time which increases from 0 to a certain time. It can be a countdown or a continuous timer that increases. It doesn't matter what the case is, but you get the meaning when anyone says timer.

Esta versión mejorada nos permite iniciar y detener el temporizador a voluntad y garantiza que la acción final se ejecute solo una vez.

 using UnityEngine; using UnityEngine.UI; public class Temporizador: MonoBehaviour { public float tiempoRestante = 125; public bool temporizadorCorriendo = false; private void Start() { // Inicia el temporizador automáticamente al empezar temporizadorCorriendo = true; } void Update() { if (temporizadorCorriendo) { if (tiempoRestante > 0) { tiempoRestante -= Time.deltaTime; } else { Debug.Log("¡El tiempo se ha acabado!"); tiempoRestante = 0; temporizadorCorriendo = false; // Detiene el temporizador } } } } 

Fíjate que también establecemos tiempoRestante = 0; al final. Esto es una buena práctica para evitar que el valor se vuelva negativo y para que la pantalla muestre un "00:00" limpio.

How to implement a stop watch in Unity?
In this article, I will discuss how to implement a stop watch in Unity to let the player know how long it takes them to escape, and then stopping the timer once the player escapes. Let’s get started. First, create a new UI Canvas with a Text Mesh Pro component. Then, create a new C# script for the Timer and add this onto the Canvas.

Visualizando el Tiempo: De Float a Minutos y Segundos

Ahora viene la parte más interesante: traducir nuestro valor flotante (por ejemplo, 125.34f) a un formato que el jugador entienda (02:05). Para ello, necesitamos calcular los minutos y los segundos por separado.

  • Minutos: Se obtienen dividiendo el tiempo total entre 60. Usamos Mathf.FloorToInt() para descartar los decimales y obtener un número entero.
  • Segundos: Para obtener los segundos restantes que no forman un minuto completo, usamos el operador módulo (%). Esta operación matemática devuelve el resto de una división. Por ejemplo, 125 % 60 nos da 5.

Es una excelente práctica encapsular esta lógica en su propia función para mantener el código organizado.

 void MostrarTiempo(float tiempoParaMostrar) { float minutos = Mathf.FloorToInt(tiempoParaMostrar / 60); float segundos = Mathf.FloorToInt(tiempoParaMostrar % 60); // Aquí irá el código para actualizar el texto en la UI } 

No olvides llamar a esta función dentro de tu Update(), pasándole la variable tiempoRestante.

What is simple timer in Unity?

 DisplayTime(tiempoRestante); 

Dando Formato al Texto para una Apariencia Profesional

Para mostrar el tiempo en pantalla, necesitarás un objeto de UI de tipo Texto. Recomendamos usar TextMeshPro, que es el estándar actual en Unity. En tu script, necesitarás una referencia pública a este componente.

Primero, asegúrate de incluir el espacio de nombres de TextMeshPro en la parte superior de tu script:

 using TMPro; 

Luego, declara la variable pública:

 public TextMeshProUGUI textoTiempo; 

Para combinar los minutos y los segundos en un solo string con el formato "00:00", la herramienta perfecta es string.Format(). Esta función nos permite construir una cadena de texto insertando variables en lugares específicos y con un formato determinado.

How to make a countdown timer in Unity?
The method for making a basic countdown timer in Unity is simple. Create a float variable to store the amount of time remaining and, every frame, subtract the duration of the previous frame (the Delta Time) from that amount. Like this: timeRemaining -= Time.deltaTime; } } } This is the basic method for creating a timer in Unity.

La sintaxis {0:00} significa: "Toma la primera variable (índice 0) y muéstrala como un número de al menos dos dígitos, rellenando con un cero a la izquierda si es necesario".

Nuestra función MostrarTiempo quedaría así:

 void MostrarTiempo(float tiempoParaMostrar) { // Un pequeño truco para que la cuenta atrás se sienta más natural // Muestra "1" durante todo el último segundo. if (tiempoParaMostrar < 0) { tiempoParaMostrar = 0; } float minutos = Mathf.FloorToInt(tiempoParaMostrar / 60); float segundos = Mathf.FloorToInt(tiempoParaMostrar % 60); textoTiempo.text = string.Format("{0:00}:{1:00}", minutos, segundos); } 

¡No olvides arrastrar tu objeto de texto desde la Jerarquía de la escena al campo "Texto Tiempo" en el Inspector del script!

Tabla Comparativa de Métodos para Temporizadores

Aunque usamos Update(), existen otras formas de manejar el tiempo en Unity. Aquí tienes una rápida comparación:

MétodoVentajasDesventajasIdeal para...
Update() con Time.deltaTimePreciso, se ejecuta en cada frame, fácil de implementar.Se ejecuta constantemente, puede ser ineficiente si hay muchos temporizadores.Temporizadores principales del juego, cuentas regresivas visibles.
Corrutinas (Coroutines)Permite pausas (yield), bueno para secuencias de eventos, más eficiente para esperas largas.Ligeramente más complejo de gestionar (iniciar, detener, referencias).Enfriamientos (cooldowns), retrasos entre acciones, eventos secuenciales.
Invoke()Extremadamente simple para ejecutar un método después de un retraso.Poco flexible, no se pueden pasar parámetros, difícil de cancelar.Retrasos simples y únicos, como hacer que un enemigo dispare 2 segundos después de ver al jugador.

Preguntas Frecuentes (FAQ)

¿Cómo inicio o detengo el temporizador desde otro script?
Puedes crear funciones públicas en tu script de temporizador, como public void IniciarTemporizador() { temporizadorCorriendo = true; } y public void DetenerTemporizador() { temporizadorCorriendo = false; }. Luego, desde el otro script, obtén una referencia a tu componente Temporizador y llama a estas funciones.
¿Por qué es crucial usar Time.deltaTime?
Si usaras un valor fijo para restar (por ejemplo, 0.02), tu temporizador correría a diferentes velocidades en ordenadores con diferentes tasas de fotogramas (FPS). Un PC más rápido lo haría correr más rápido y uno más lento, más lento. Time.deltaTime garantiza que la cuenta atrás sea consistente y se base en el tiempo real.
¿Puedo adaptar este código para un cronómetro que cuente hacia arriba?
¡Absolutamente! Simplemente inicializa tu variable de tiempo en 0 (float tiempoActual = 0;) y en lugar de restar, suma Time.deltaTime en cada fotograma (tiempoActual += Time.deltaTime;). La lógica para mostrar los minutos y segundos es exactamente la misma.
¿Cómo puedo añadir milisegundos?
Para mayor precisión, puedes calcular los milisegundos. La lógica sería: float milisegundos = (tiempoParaMostrar % 1) * 1000;. Luego, actualiza tu string.Format para incluirlo: string.Format("{0:00}:{1:00}:{2:000}", minutos, segundos, milisegundos);.

Conclusión

Crear un temporizador de cuenta regresiva en Unity es una tarea que combina lógica de programación fundamental con el manejo de la interfaz de usuario. Al seguir los pasos de esta guía, has aprendido no solo a hacer que el tiempo cuente hacia atrás de manera precisa con Time.deltaTime, sino también a controlar su estado y, lo más importante, a presentarlo al jugador de una manera clara y profesional usando el operador módulo y string.Format. Ahora tienes el poder de controlar el tiempo en tus juegos y añadir una capa extra de desafío y emoción a tus proyectos.

Si quieres conocer otros artículos parecidos a Crea un Temporizador de Cuenta Atrás en Unity puedes visitar la categoría Juegos.

Subir