Timers en Unity

totespare

Buenas!

Me veo en la necesidad de gestionar unos cuantos timers al mismo tiempo (como máximo 20, creo), y no se qué approach seguir para hacerlo de manera más eficiente y que no se desincronicen. Las corutinas con un WaitForSeconds se me acaban descompensando, y la única manera que tengo de que sea lo más real posible es hacer la típica de ir acumulando el deltaTime, pero me parece bastante guarrera... Alguna recomendación?

B
WaitForFixedUpdate

edit: puedes usar un timer único donde generar timers administrados

edit2: o usar un contador para sincronizar, pero con el WaitForFixedUpdate debería ser suficiente, creo.

1 respuesta
totespare

#2 dices de usar ese waitforfixedupdate para la corutina y asi que no se descompense? Lo del timer único cómo dices de hacerlo?

B

WaitForFixedUpdate para la corutina.

Pues, yo siempre uso un timer único para casi todo (FixedUpdate o WaitForFixedUpdate desde corutina), desde donde lanzo llamadas usando contadores para "simular timers"

El edit2 sería usar una variable global que sume ticks y usarla para sincronizar todos los timers...

Una descripción más detallada de lo que estás intentando hacer con los timers podría ayudar para dar otras posibles soluciones.

1 respuesta
totespare

#4 en resumen lo que quiero hacer es reproducir más o menos el sistema de estadísticas de los Sims. Para cada estadística necesito un timer, además de que necesito también contar a su vez cuánto tiempo está cada estadística en un estado concreto, o sea que si tengo 5 stats, por ejemplo, necesitaré 10 timers (serán más, como 8 o 9 stats, quizá 10, siendo entonces 20 timers).

Me interesa lo de simular timers teniendo uno único, cómo lo implementas?

B

Pues no se, de muchas formas... la idea que planteo es crear una corutina a modo de manager, el resto rutinas normales y usar contadores en la corutina para llamar al resto.

Keldon

#1 Podrias probar con DateTime y TimeStamp quizas.

timeRemaining = ExpireDate - DateTime.UtcNow;

Esto te va a devolver un TimeStamp con el que ya podras escupir el tiempo restante que te queda en ese instante en el formato que prefieras.
Si esto lo metes en una corutina que te devuelva este valor cada X segundos pues ya podras pintar un timer.

No se si es exactamente lo que preguntas, me falta un cafe para empezar a entender a las personas jajajaja

1 respuesta
B

Yo es que desde que leí el artículo "10000 Update() calls" del blog de Unity uso managers para casi todo incluso sin ser necesario xddd

1 respuesta
totespare

#7 me parece una solución bastante menos limpia que la de sumar deltas, pero gracias!

#8 pero cabrón, ponme ejemplos, me hablas siempre demasiado abstracto xD

2 respuestas
Keldon

#9 ahora releyendote tiene toda la pinta de que no he entendido muy bien lo que buscabas xDD

B

#9 a ver, es que depende, lo haría de muchas formas... la más sencilla por ejemplo

spoiler

O, en vez de tener el código a ejecutar en el manager, usar un script personalizado para cada timer...

ej unTimerManejado.cs para cada timer con sus ajustes individuales (suma contador interno y tiempo entre ticks como variables públicas)

Ya desde el manager principal con un

unTimerManejado[] lista = GetComponents<unTimerManehado>();

gestionas la lista y la usas para configurar el manager... y vas llamando los unTimerManejado desde el manager usando el array lista.

1 respuesta
totespare

#11 vale, voy a ver cuál de las dos opciones me va mejor, porque no tengo propiedades asociadas a los timers en sí. Gracias debug! Digoooo, return!

1

Usuarios habituales