Мне нужно сохранить до X (изменяемое количество) экземпляров таймеров обратного отсчета, каждый из которых добавляется пользователем, как только один из них достигает 0, он вызывает функцию, в то время как другие счетчики продолжают считать.для этого я попытался создать их очередь, но, как оказалось, я не могу изменить значение переменной итерации в foreach:
public struct Debuff
{
public float Timer;
public int Stack;
public int MaxStack;
...
}
public Debuff Poisoned;
public void CalcDamage(...)
{
...
if (Poisoned.Stack < Poisoned.MaxStack)
{
Poisoned.Stack++;
PoisonStacksTimer.Enqueue(Poisoned.Timer);
InvokeRepeating("Poisoning", 0.1F, 1F);
}
else
{
PoisonStacksTimer.Dequeue();
PoisonStacksTimer.Enqueue(Poisoned.Timer);
}
}
public void Poisoning()
{
foreach(float PTimer in PoisonStacksTimer)
{
TakeDamage(Poisoned.DmgTranslate);
PTimer -= Time.deltaTime; // here lies at least one of the problems
if (PTimer <= 0)
{
Poisoned.Stack--;
PoisonStacksTimer.Dequeue();
CancelInvoke("Poisoning");
}
}
}
. Есть ли другой способ использовать таймеры обратного отсчетав очереди?или, может быть, лучший способ достичь моей цели?я впервые задаю вопрос здесь, поэтому надеюсь, что я четко объяснил свою проблему.