Игровые механики
В этом разделе подробно описаны основные механики игры CollectorBots: как работают рабочие, базы, ресурсы и строительство.
Механика рабочих
Рабочие (роботы) — это ключевые юниты, которые выполняют все физические действия в игре: собирают ресурсы, доставляют их на базу, перемещаются по карте.
Движение
- NavMesh: каждый рабочий имеет компонент
NavMeshAgent, который позволяет ему перемещаться по поверхности Ground, обходя препятствия. - WorkerMover: высокоуровневый скрипт, управляющий движением. Он принимает целевую позицию и заставляет агента двигаться к ней.
- Состояния движения: рабочий может находиться в состоянии
Idle(ожидание),MovingToResource(движение к ресурсу),MovingToBase(движение к базе),Returning(возврат в зону ожидания).
Сбор ресурсов
- Поиск ресурса: база периодически сканирует область вокруг себя и находит ближайший ресурс.
- Назначение задачи: база создаёт задачу сбора и назначает её свободному рабочему.
- Движение к ресурсу: рабочий перемещается к позиции ресурса.
- Анимация захвата: при достижении ресурса проигрывается анимация
Armature_Grab_WithEvent, в момент которой ресурс визуально прикрепляется к точке захвата (GrabPoint) рабочего. - Изъятие ресурса: ресурс удаляется из мира (или деактивируется), а его тип и количество запоминаются в состоянии рабочего.
Доставка ресурсов
- После захвата ресурса рабочий переходит в состояние доставки.
- Он движется к зоне доставки базы (определённой в
BaseStructure). - При входе в зону доставки проигрывается анимация
Armature_Bring_WithEvent, ресурс визуально отделяется от рабочего. - Ресурс добавляется в хранилище базы, и публикуется событие
ResourceCollectedEvent. - Рабочий возвращается в зону ожидания и ждёт следующую задачу.
Состояния и анимации
- Idle: анимация покоя (рабочий стоит или слегка покачивается).
- Walking: анимация ходьбы, когда
NavMeshAgentдвижется. - Grab: анимация захвата ресурса (триггерится событием
OnGrab). - Bring: анимация доставки ресурса (триггерится событием
OnBring).
Анимации управляются через WorkerAnimator.controller и скрипт AnimationStateMonitor.
Механика баз
База (BaseStructure) — это центральная структура, которая управляет рабочими, сканирует ресурсы и накапливает собранные материалы.
Сканирование ресурсов
- Радиус сканирования: задаётся в
BaseStructureConfig(по умолчанию 278.4 единиц). - Интервал сканирования: также из конфига (1 секунда).
- Механизм: каждый интервал база ищет в своей области все ресурсы (
IronResource,StoneResource,WoodResource) с помощьюAreaRaycaster. - Приоритет: ресурсы сортируются по расстоянию до базы, ближайшие назначаются первыми.
Управление рабочими
- Начальное количество: у стартовой базы — 3 рабочих, у вторичной — 0.
- Постройка новых рабочих: игрок может нажать кнопку «Построить рабочего» в UI, если есть достаточно ресурсов (стоимость задаётся в
BuilderConfig). - Процесс постройки: занимает время (10 секунд), после чего в зоне появления базы инстанцируется префаб
Worker.prefab. - Управление задачами: база содержит очередь задач (
PriorityQueue) и назначает их свободным рабочим.
Зоны базы
Каждая база имеет три зоны (определяются в конфиге):
- Зона ожидания (
WaitingArea) — где рабочие стоят в бездействии. - Зона доставки (
DeliveryArea) — куда рабочие приносят ресурсы. - Зона появления (
SpawnArea) — где появляются новые рабочие после постройки.
Зоны задаются как Area (прямоугольник) и визуализируются в редакторе через GizmosAreaDrawer.
События базы
BaseStructureBuilt— когда база построена (для вторичных баз).WorkerBuilt— когда завершена постройка рабочего.WorkerSpawned— когда рабочий появился в мире.
Механика ресурсов
Ресурсы — это объекты, которые рабочие собирают и доставляют на базу. В игре три типа ресурсов: камень, дерево, железо.
Типы ресурсов
- StoneResource — серые камни, вес 100 (чаще всего спавнятся).
- WoodResource — коричневые брёвна, вес 95.
- IronResource — серебристые слитки, вес 90.
Каждый тип имеет свой префаб и иконку в UI.
Спавн ресурсов
Управляется ResourceSpawner на основе ResourceSpawnerConfig:
- Область спавна: прямоугольник от (-72.5, 105) до (72.5, -112.5) в мировых координатах.
- Интервал спавна: 4 секунды.
- Взвешенный случайный выбор: вероятность появления каждого типа пропорциональна его весу.
- Максимальное количество ресурсов: ограничено, чтобы не перегружать сцену.
Ресурс спавнится как префаб (маленький или средний вариант) в случайной точке внутри области.
Сбор ресурсов
Когда рабочий собирает ресурс, происходит следующее:
- Ресурс деактивируется (или уничтожается).
- Его тип и количество (всегда 1) записываются в инвентарь рабочего.
- После доставки ресурс добавляется в хранилище базы.
Хранение ресурсов
Каждая база имеет собственное хранилище (ResourceStorage), которое отслеживает количество каждого типа ресурсов. Хранилище обновляет UI через событие ResourceStorageChangedEvent.
Механика строительства
Игрок может строить новые базы и рабочих, тратя накопленные ресурсы.
Стоимость и время
Настройки хранятся в DefaultBuilderConfig:
База:
- Камень: 2
- Дерево: 1
- Железо: 2
- Время постройки: 20 секунд
Рабочий:
- Камень: 1
- Дерево: 2
- Железо: 0
- Время постройки: 10 секунд
Процесс строительства
- Игрок выбирает базу (кликает на неё).
- В UI появляется панель управления (
BaseStructurePanelGroup). - При нажатии кнопки «Построить базу» проверяется, хватает ли ресурсов.
- Если ресурсов достаточно, они списываются, и начинается таймер.
- По истечении времени в указанном месте (обычно рядом с главной базой) появляется новая база (
SecondaryBase.prefab).
Отмена строительства
На данный момент отмена не реализована — после начала постройки ресурсы уже списаны, и процесс нельзя прервать.
Взаимодействие механик
graph LR
A[Ресурс спавнится] --> B[База сканирует]
B --> C[Назначает задачу]
C --> D[Рабочий движется к ресурсу]
D --> E[Собирает ресурс]
E --> F[Доставляет на базу]
F --> G[Ресурс добавляется в хранилище]
G --> H[Игрок тратит ресурсы на строительство]
H --> I[Появляется новый рабочий/база]
I --> B
Ссылки на скрипты
- Рабочие:
Assets/Scripts/Gameplay/Features/Worker.cs,WorkerMovement/,GrabPoint.cs - Базы:
Assets/Scripts/Gameplay/Features/BaseStructure.cs,BaseStructureConfig.cs - Ресурсы:
Assets/Scripts/Gameplay/Features/ResourceSpawner.cs,ResourceSpawnerConfig.cs - Строительство:
Assets/Scripts/Gameplay/Features/BuilderManagement/,BuilderConfig.cs - Задачи:
Assets/Scripts/Gameplay/Features/TaskManagement/
Балансировка
Текущие значения (веса ресурсов, интервалы, стоимости) подобраны для умеренного темпа игры. При желании их можно легко изменить через ScriptableObject ассеты в Assets/Resources/Configs/.