Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Игровые механики

В этом разделе подробно описаны основные механики игры CollectorBots: как работают рабочие, базы, ресурсы и строительство.

Механика рабочих

Рабочие (роботы) — это ключевые юниты, которые выполняют все физические действия в игре: собирают ресурсы, доставляют их на базу, перемещаются по карте.

Движение

  • NavMesh: каждый рабочий имеет компонент NavMeshAgent, который позволяет ему перемещаться по поверхности Ground, обходя препятствия.
  • WorkerMover: высокоуровневый скрипт, управляющий движением. Он принимает целевую позицию и заставляет агента двигаться к ней.
  • Состояния движения: рабочий может находиться в состоянии Idle (ожидание), MovingToResource (движение к ресурсу), MovingToBase (движение к базе), Returning (возврат в зону ожидания).

Сбор ресурсов

  1. Поиск ресурса: база периодически сканирует область вокруг себя и находит ближайший ресурс.
  2. Назначение задачи: база создаёт задачу сбора и назначает её свободному рабочему.
  3. Движение к ресурсу: рабочий перемещается к позиции ресурса.
  4. Анимация захвата: при достижении ресурса проигрывается анимация Armature_Grab_WithEvent, в момент которой ресурс визуально прикрепляется к точке захвата (GrabPoint) рабочего.
  5. Изъятие ресурса: ресурс удаляется из мира (или деактивируется), а его тип и количество запоминаются в состоянии рабочего.

Доставка ресурсов

  1. После захвата ресурса рабочий переходит в состояние доставки.
  2. Он движется к зоне доставки базы (определённой в BaseStructure).
  3. При входе в зону доставки проигрывается анимация Armature_Bring_WithEvent, ресурс визуально отделяется от рабочего.
  4. Ресурс добавляется в хранилище базы, и публикуется событие ResourceCollectedEvent.
  5. Рабочий возвращается в зону ожидания и ждёт следующую задачу.

Состояния и анимации

  • 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) и назначает их свободным рабочим.

Зоны базы

Каждая база имеет три зоны (определяются в конфиге):

  1. Зона ожидания (WaitingArea) — где рабочие стоят в бездействии.
  2. Зона доставки (DeliveryArea) — куда рабочие приносят ресурсы.
  3. Зона появления (SpawnArea) — где появляются новые рабочие после постройки.

Зоны задаются как Area (прямоугольник) и визуализируются в редакторе через GizmosAreaDrawer.

События базы

  • BaseStructureBuilt — когда база построена (для вторичных баз).
  • WorkerBuilt — когда завершена постройка рабочего.
  • WorkerSpawned — когда рабочий появился в мире.

Механика ресурсов

Ресурсы — это объекты, которые рабочие собирают и доставляют на базу. В игре три типа ресурсов: камень, дерево, железо.

Типы ресурсов

  • StoneResource — серые камни, вес 100 (чаще всего спавнятся).
  • WoodResource — коричневые брёвна, вес 95.
  • IronResource — серебристые слитки, вес 90.

Каждый тип имеет свой префаб и иконку в UI.

Спавн ресурсов

Управляется ResourceSpawner на основе ResourceSpawnerConfig:

  • Область спавна: прямоугольник от (-72.5, 105) до (72.5, -112.5) в мировых координатах.
  • Интервал спавна: 4 секунды.
  • Взвешенный случайный выбор: вероятность появления каждого типа пропорциональна его весу.
  • Максимальное количество ресурсов: ограничено, чтобы не перегружать сцену.

Ресурс спавнится как префаб (маленький или средний вариант) в случайной точке внутри области.

Сбор ресурсов

Когда рабочий собирает ресурс, происходит следующее:

  1. Ресурс деактивируется (или уничтожается).
  2. Его тип и количество (всегда 1) записываются в инвентарь рабочего.
  3. После доставки ресурс добавляется в хранилище базы.

Хранение ресурсов

Каждая база имеет собственное хранилище (ResourceStorage), которое отслеживает количество каждого типа ресурсов. Хранилище обновляет UI через событие ResourceStorageChangedEvent.

Механика строительства

Игрок может строить новые базы и рабочих, тратя накопленные ресурсы.

Стоимость и время

Настройки хранятся в DefaultBuilderConfig:

База:

  • Камень: 2
  • Дерево: 1
  • Железо: 2
  • Время постройки: 20 секунд

Рабочий:

  • Камень: 1
  • Дерево: 2
  • Железо: 0
  • Время постройки: 10 секунд

Процесс строительства

  1. Игрок выбирает базу (кликает на неё).
  2. В UI появляется панель управления (BaseStructurePanelGroup).
  3. При нажатии кнопки «Построить базу» проверяется, хватает ли ресурсов.
  4. Если ресурсов достаточно, они списываются, и начинается таймер.
  5. По истечении времени в указанном месте (обычно рядом с главной базой) появляется новая база (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/.