Последовательный вызов метода в Unity3d по истечению определённого времени
Я делаю UI для своего интерфейса в игре, но у меня не получается создать уведомления при помощи скрипта.
Логика, которую хочу реализовать: Вызывается ОДНО уведомление и оно по истечению 5 секунд обратно выходит из экрана и уничтожается. Но если подряд вызвалось НЕСКОЛЬКО уведомлений, то уведомления поочерёдно сменяются друг за другом, но уже по истечению 1 секунды.
В чём суть, у меня есть 2 скрипта (третий скрипт для анимации `LeanTween` - есть в Asset store):
- Первый (
NotiesGameObject) висит на самом уведомлении (сохранённом префабе) и срабатывает ТОЛЬКО когда объект появляется на сцене активным true (для запуска егоvoid Start()). При старте запускается короутин, который по истечению времени (yield return new WaitForSeconds(5)) запускает анимацию, по истечению которой запускается методDestroyMe()- (LeanTween.moveX(gameObject, StartPosition.x, 0.5f).setOnComplete(DestroyMe);)Вот сам
DestroyMe():
private void DestroyMe()
{
//Notification.instance - это Singleton, а notifications - List<T>
Notification.instance.notifications.Remove(gameObject);
Destroy(gameObject);
}
- Второй скрипт, Singleton отвечающий за вызов уведомлений, в функции
CallMessageзадаёт уже название, тип и описание уведомления и вызывает методAddObjectContainer(cloneNotification);, гдеcloneNotification- это игровой объект.
private void AddObjectContainer(GameObject objectAdd)
{
if (notifications.Count != 0)
StartCoroutine(waitForNotification(EndMatch));
else
EndMatch();
void EndMatch()
{
notifications.Add(objectAdd);
objectAdd.SetActive(true);
}
}
Далее сам короутин IEnumerator, который отвечает за постепенный вызов
IEnumerator waitForNotification(Action end)
{
yield return new WaitForSeconds(0.5f);
//В foreach хотел впихнуть WaitForSeconds, но проблема...
foreach (GameObject notie in notifications)
LeanTween.moveY(notie, 5000, 5f); //5000 - это просто выкидывает вверх уведомление
end();
}
Но вот проблема... При вызове 4 уведомлений, т.к. действуйет WaitForSeconds то foreach не может работать, т.к. изменять List нельзя при работу foreach нельзя. Что можете порекомендовать?
Заранее спасибо