#9 a ver, es que depende, lo haría de muchas formas... la más sencilla por ejemplo
spoilervoid Start()
{
StartCoroutine("manager");
}
IEnumerator manager()
{
float tick = Time.fixedDeltaTime;
float[,] timers = {{0, 1f}, {0, 5f}, {0, 10f}};
int mtimers = timers.Length / 2;
while (true)
{
for (int i = 0; i < mtimers; i++)
{
timers[i, 0] += tick;
if (timers[i, 0] >= timers[i, 1])
{
timers[i, 0] -= timers[i, 1];
switch (i)
{
case 0:
misRutinas1s();
break;
case 1:
misRutinas5s();
break;
case 2:
misRutinas10s();
break;
}
}
}
yield return new WaitForFixedUpdate();
}
}
void misRutinas1s()
{
print("rutina a 1s");
}
void misRutinas5s()
{
print("rutina a 5s");
}
void misRutinas10s()
{
print("rutina a 10s");
}
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.