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
Stepque 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
| Propiedad | Tipo | Descripción |
|---|---|---|
TotalTime | float | Duración total configurada para la cuenta regresiva, en segundos. |
RemainingTime | float | Tiempo 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
| Evento | Delegate | Se dispara cuando... |
|---|---|---|
OnTimerFinish | UnityEvent | El tiempo restante llega a cero, o se llama explícitamente a Finish(). |
OnTimerRun | UnityEvent | El temporizador comienza o reanuda su cuenta regresiva mediante Run(). |
OnTimerPause | UnityEvent | El 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();
}
}