Данный проект реализует расширяемую архитектуру заданий (tasks) для Unity с использованием:
- DDD (Domain-Driven Design)
- Dependency Injection через VContainer
- Разделения ответственности (Provider, Service, Query)
- Реактивной модели (события ProgressChanged, Completed)
- Поддержки Tickable и Event-driven задач
- Поддержки динамического добавления, сохранения и модульного расширения
Assets/
├── Features/
│ ├── Tasks/
│ │ ├── Application/
│ │ │ ├── TaskSeeder.cs
│ │ │ └── TaskService.cs
│ │ ├── Domain/
│ │ │ ├── Core/
│ │ │ │ ├── ITask.cs
│ │ │ │ ├── ITickableTask.cs
│ │ │ │ ├── ITaskProvider.cs
│ │ │ │ └── ITaskQuery.cs
│ │ │ ├── Implementations/
│ │ │ │ ├── Tasks/
│ │ │ │ │ ├── DestroyAnyTask.cs
│ │ │ │ │ ├── DestroySpecificTask.cs
│ │ │ │ │ ├── TimeTask.cs
│ │ │ │ └── TaskProvider.cs
│ │ │ └── Support/
│ │ │ ├── TaskBase.cs
│ │ │ ├── TickedTaskBase.cs
│ │ │ └── EventDrivenTaskBase.cs
│ │ ├── Infrastructure/
│ │ │ └── TaskScope.cs
│ │ └── UI/
│ │ ├── TaskUI.cs
│ │ ├── TaskUIFactory.cs
│ │ └── Prefabs/
│ │ └── TaskUI.prefab
│
├── Gameplay/
│ ├── Destructible/
│ │ ├── Prefabs/
│ │ │ ├── DestructibleCube.prefab
│ │ │ ├── DestructibleRow.prefab
│ │ │ └── DestructibleSphere.prefab
│ │ ├── DestructibleObject.cs
│ │ └── ObjectDestroyedEvent.cs
│ └── Infrastructure/
│ └── GameplayScope.cs
│
├── Infrastructure/
│ └── GameScope.cs
│
├── Shared/
│ └── Events/
│ ├── GameEventBus.cs
│ └── IGameEventBus.cs
│
├── Scenes/
│ └── MainScene.unity
| Компонент | Назначение |
|---|---|
| GameScope | Глобальный контейнер зависимостей |
| TaskProvider | Хранилище всех задач, рассылает события |
| TaskService | Управляет задачами: инициирует, тикает, отображает |
| TaskSeeder | Добавляет начальные задачи при запуске (временно) |
| TaskUI / Factory | Реактивное обновление UI |
| DestructibleObject | Генерирует события при клике |
| EventBus | Связь между системами без прямых зависимостей |
- Унаследуй класс от TaskBase / TickedTaskBase / EventDrivenTaskBase
- Реализуйте:
DescriptionProgressTextProgressOnTick()илиOnEvent(...)
- Добавьте задачу через TaskProvider:
taskProvider.AddTask(...)или по умолчанию вTaskSeeder
- Создайте Canvas/Panel с VerticalLayoutGroup → это будет
uiRoot - Создайте TaskUI.prefab и назначьте необходимые компоненты (Text, Slider, Image)
- Разместите
GameScope, - Разместите
TaskScopeиGameplayScope, укажите им ParentGameScope - Укажите в TaskScope префаб UI и корневой контейнер для интерфейса
- Unity 2022.2+ или Unity 6+
- VContainer
- TextMeshPro