Это симуляция, где мы можем увидеть как дроны собирают ресурсы и несут собственно на базу
✅ Автономные дроны – самостоятельно ищут и собирают ресурсы
✅ Система состояний (State Pattern) – плавные переходы между поиском сбором и доставкой
✅ Разделение ответственностей – движение, сбор ресурсов и AI логика разделены
✅ Генерация ресурсов – случайное появление ресурсов на карте
✅ Две команды – синие и красные дроны со своими базами
✅ Гибкая настройка – параметры игры настраиваются через ScriptableObject
Основные компоненты
- Дроны (Drone) IDrone – главный интерфейс дрона
IMove – отвечает за движение (DroneMove)
IResourceCollector – сбор и доставка ресурсов (DroneResourceCollector)
IStateMachine – управление состояниями (DroneStateMachine)
- Состояния дронов (State Pattern) SearchingState – поиск ближайшего ресурса
MovingState – движение к ресурсу
CollectingState – сбор ресурса (таймер)
ReturnState – возвращение на базу
DeliveringState – доставка ресурса
- Базы (Base) IBase – хранит количество ресурсов
AddResource() – увеличивает счетчик при доставке
- Ресурсы (Resource) IResource – интерфейс ресурса
Collect() – помечает ресурс как собранный
- Генерация и управление DroneFactory – создает дронов (Абстрактная фабрика)
DroneSpawner – спавнит дронов для каждой базы
ResourceSpawner – генерирует ресурсы на карте
DroneGameSettingsSO – настройки через ScriptableObject
Паттерны проектирования:
State – управление поведением дронов
Factory – создание дронов
Dependency Injection – внедрение зависимостей (IResourceProvider, IMove)
Interface Segregation (ISP) – разделение интерфейсов (IMove, IResourceCollector)
Unity-инструменты NavMeshAgent – навигация дронов
ScriptableObject – гибкие настройки игры
MonoBehaviour + чистый C# – разделение Unity-логики и бизнес-логики
Дрон работает ровно как отмечено в задании:
Поиск (SearchingState) → Находит ближайший ресурс
Движение (MovingState) → Летит к ресурсу
Сбор (CollectingState) → Забирает ресурс (2 сек)
Возврат (ReturnState) → Летит на базу
Доставка (DeliveringState) → Сбрасывает ресурс (1 сек)
Повтор → Снова ищет ресурс