Saltar al contenido principal

CountDownTimer

Resumen

Namespace Imova.Flux. Clase CountDownTimer : MonoBehaviour. Es un componente de escena (no un singleton).

Su responsabilidad es administrar un temporizador de cuenta regresiva por paso: llevar el estado de la cuenta (detenida, corriendo, en pausa o finalizada), notificar mediante UnityEvents los cambios relevantes, y exponer el tiempo restante en un formato listo para mostrar en UI.

Cuándo usarla

  • Para implementar el timeout opcional de un Step que debe completarse dentro de un tiempo límite.
  • Para mostrar en pantalla una cuenta regresiva (mm:ss) asociada al paso o secuencia activa.
  • Para pausar y reanudar la cuenta regresiva ante interrupciones de la experiencia (por ejemplo, un modal o una pérdida de foco de la aplicación).

Propiedades

PropiedadTipoDescripción
TotalTimefloatDuración total configurada para la cuenta regresiva, en segundos.
RemainingTimefloatTiempo restante actual, en segundos.

Enum interno:

enum TimerState
{
NOT_STARTED,
RUNNING,
PAUSED,
FINISHED
}

Representa el estado del temporizador: sin iniciar, corriendo, en pausa o finalizado.

Métodos

void SetTime(float time)

Configura TotalTime y reinicia el tiempo restante a ese valor, sin iniciar la cuenta regresiva.

void SetRemainingTime(float time)

Ajusta directamente RemainingTime, sin modificar TotalTime. Útil para restaurar un temporizador a un punto intermedio (por ejemplo, tras recuperar una sesión).

void Run()

Inicia (o reanuda) la cuenta regresiva, pasando el estado a RUNNING y disparando OnTimerRun.

bool Pause()

Pausa la cuenta regresiva si está corriendo, pasando el estado a PAUSED y disparando OnTimerPause. Devuelve true si logró pausar (el temporizador estaba corriendo) o false en caso contrario.

virtual string GetDisplayTime()

Devuelve el tiempo restante formateado como cadena "mm:ss", lista para asignar directamente a un componente de texto de UI.

void Restart(bool run)

Reinicia RemainingTime a TotalTime y, según el parámetro run, deja el temporizador detenido o lo inicia inmediatamente.

void Finish()

Fuerza la finalización del temporizador, pasando el estado a FINISHED y disparando OnTimerFinish, sin esperar a que el tiempo restante llegue naturalmente a cero.

Eventos

EventoDelegateSe dispara cuando...
OnTimerFinishUnityEventEl tiempo restante llega a cero, o se llama explícitamente a Finish().
OnTimerRunUnityEventEl temporizador comienza o reanuda su cuenta regresiva mediante Run().
OnTimerPauseUnityEventEl temporizador se pausa exitosamente mediante Pause().

Ejemplo de código

public class StepTimerUI : MonoBehaviour
{
[SerializeField] private CountDownTimer _timer;
[SerializeField] private Text _label;

private void Start()
{
_timer.SetTime(60f);
_timer.Run();
}

private void Update()
{
_label.text = _timer.GetDisplayTime();
}
}

Ver también