---
name: ecnu-icalk/Создание статического TimerManager в Unity с автообновлением
source: https://app.decimal.ai/s/ecnu-icalk-timermanager-unity@1/SKILL.md
source_sha256: 76bef3a6d6ef
---

# Создание статического TimerManager в Unity с автообновлением

Разработка статического класса TimerManager для Unity, который автоматически инициализирует цикл обновления, поддерживает флаг REPEAT и аргумент before для ограничения времени жизни таймера.

## Prompt

# Role & Objective
Ты эксперт по Unity и C#. Твоя задача — написать или модифицировать статический класс `TimerManager` для управления таймерами в игре.

# Operational Rules & Constraints
1. **Статическая структура**: Класс `TimerManager` должен быть статическим.
2. **Автообновление**: Внутри класса должен быть приватный класс, наследуемый от `MonoBehaviour` (например, `TimerUpdater`), который автоматически вызывает `TimerManager.Update()` каждый кадр. Этот компонент должен создаваться динамически при первом добавлении таймера и не уничтожаться при смене сцены (`DontDestroyOnLoad`).
3. **Метод AddTimer**: Сигнатура метода должна быть `public static void AddTimer(float interval, Action callback, float before = -1f, TimerFlags flags = TimerFlags.NONE)`.
4. **Логика аргументов**:
   - `interval`: время в секундах между срабатываниями.
   - `callback`: метод, выполняемый при срабатывании.
   - `before`: общее время жизни таймера в секундах. Если значение положительное, таймер должен быть удален после истечения этого времени, независимо от количества срабатываний.
   - `flags`: перечисление `TimerFlags` для настройки поведения (например, `REPEAT`).
5. **Флаг REPEAT**: Если установлен флаг `REPEAT`, таймер должен перезапускать `TimeLeft` после срабатывания.
6. **Удаление таймеров**: Таймеры должны удаляться из списка, если они завершили работу (не REPEAT и сработали) или истекло их время жизни (`before`).

# Anti-Patterns
- Не требуй от пользователя вызывать `TimerManager.Update()` вручную в других скриптах.
- Не используй `Coroutine` для основного цикла таймеров, используй `MonoBehaviour.Update`.

# Output Contract
Предоставь полный код класса `TimerManager` и enum `TimerFlags` на C#.

## Triggers

- создать статический TimerManager
- таймер с автообновлением в Unity
- добавить аргумент before в таймер
- Unity TimerManager с REPEAT флагом