Перейти к основному содержимому

Настройка первого сражения

Это руководство показывает, как настроить зону встреч, запустить дикое сражение и понять ход боя. По завершении у вас будет работающее сражение, которое можно протестировать в редакторе.

Предварительные требования

  • MCE установлен и мастер настройки завершён.
  • В вашей базе данных есть хотя бы один монстр (включённые 151 или созданный вами).
  • У вас есть сцена с персонажем игрока и тайловой картой на основе сетки.

Шаг 1: Создание зоны встреч

Дикие сражения запускаются тайлами встреч на вашей тайловой карте. Вот как их настроить:

  1. В иерархии вашей сцены выберите слой тайловой карты, где вы хотите разместить встречи (обычно слой "Grass" или "TallGrass").
  2. Создайте новый пустой GameObject как дочерний элемент вашей сетки: Right-click > Create Empty, назовите его GrassEncounters.
  3. Добавьте компонент EncounterTile к этому GameObject.
  4. Расположите его на тайлах, где должны происходить встречи, используя координаты тайловой сетки.

Альтернативно, вы можете рисовать зоны встреч напрямую на выделенном слое тайловой карты, используя типы тайлов встреч MCE.

Шаг 2: Настройка таблицы встреч

Компонент EncounterTile ссылается на ScriptableObject WildEncountersSet. Создайте его:

  1. Assets > Create > OpenMon > Wild Encounters Set
  2. Назовите его описательно, например, Route1_GrassEncounters.
  3. Откройте ScriptableObject и настройте встречи:
ПолеОписание
MonsterScriptableObject MonsterEntry для вида, который может появиться
Min LevelМинимальный уровень дикого монстра
Max LevelМаксимальный уровень дикого монстра
ProbabilityВес встречи (чем выше, тем чаще)
Encounter TypeКогда может сработать эта встреча (Walking, Surfing, Fishing и т.д.)

Добавьте несколько записей для разнообразия. Например:

МонстрДиапазон уровнейВероятность
Flameleon3-540
Leaflet3-540
Sparkit4-620
  1. Назначьте этот WildEncountersSet в поле Encounters вашего компонента EncounterTile.

Шаг 3: Настройка сцены сражения

MCE использует отдельную сцену сражения, которая загружается аддитивно при начале боя. Вам нужно:

  1. Компонент BattleLauncher в вашей сцене открытого мира. Обычно он размещён на постоянном GameObject-менеджере. Если вы использовали мастер настройки, он уже должен существовать.
  2. Сцена сражения, настроенная в вашем Build Settings. Стандартная сцена сражения включена в MCE.

BattleLauncher управляет переходом:

  • Затемняет экран.
  • Загружает сцену сражения аддитивно.
  • Создаёт экземпляр BattleManager с правильными параметрами.
  • Возвращает в открытый мир по окончании сражения.

Компоненты BattleManager

BattleManager -- это сердце системы сражений. В сцене сражения вы найдёте GameObject с компонентом BattleManager, который использует модульную архитектуру со следующими ключевыми модулями:

МодульНазначение
BattlersModuleУправляет экземплярами бойцов с обеих сторон
HealthModuleОтслеживание HP, нокаут, лечение
MovesModuleВыполнение приёмов, отслеживание PP, эффективность типов
ItemsModuleИспользование предметов в бою
CaptureModuleМеханики захвата диких монстров
AIModuleПринятие решений противником
AnimationModuleБоевые анимации и визуальные эффекты
AudioModuleМузыка и звуковые эффекты сражения
StatusesModuleСостояния статуса (ожог, отравление, сон и т.д.)
BattlerStatsModuleСтадии и модификации характеристик
BattlerSwitchModuleПереключение между членами отряда
RostersModuleУправление отрядом во время сражения
ScenariosModuleКонфигурация типа сражения (дикое, тренерское и т.д.)
MegaModuleАктивация Мега-эволюции
CharactersModuleОтображение спрайтов тренеров

Вам не нужно настраивать их по отдельности. BattleManager связывает всё автоматически через внедрение зависимостей Zenject.

Шаг 4: Настройка BattleStateMachine

BattleStateMachine управляет ходом сражения:

Start -> Introduction -> Turn Selection -> Action Execution ->
-> Check Fainted -> Replace Fainted -> Turn End ->
-> [возврат к Turn Selection или] -> Battle End -> Results

Конечный автомат предварительно настроен в префабе сцены сражения. Каждое состояние автоматически обрабатывает переходы на основе условий боя.

Шаг 5: Тестирование сражения

  1. Убедитесь, что ваша сцена открытого мира содержит:

    • PlayerCharacter с ростером, содержащим хотя бы одного монстра.
    • EncounterTile с настроенным WildEncountersSet.
    • BattleLauncher на GameObject-менеджере.
  2. Нажмите Play в редакторе.

  3. Переместите персонажа в зону встреч.

  4. Через несколько шагов (определяемых частотой встреч) начнётся сражение.

Быстрое тестирование

Для немедленного тестирования сражений без необходимости ходить по карте вы можете:

  1. Установить частоту встреч на 100% на вашем EncounterTile.
  2. Или использовать компонент BattleLauncher напрямую и вызвать его метод запуска из тестового скрипта.

Понимание хода сражения

Когда сражение начинается, происходит следующее:

  1. BattleLauncher получает триггер встречи от EncounterTile.
  2. Создаётся объект BattleParameters с данными дикого монстра.
  3. Сцена сражения загружается аддитивно.
  4. BattleManager инициализирует все модули.
  5. BattleStateMachine входит в состояние Introduction (показывает дикого монстра, воспроизводит крик).
  6. Игроку предлагается выбор действий: Fight, Bag, Monster, Run.
  7. Действия выполняются в порядке скорости.
  8. Цикл продолжается, пока одна сторона не будет нокаутирована или игрок не сбежит/поймает монстра.
  9. BattleResultParameters отправляются обратно в открытый мир (полученный опыт, использованные предметы, пойманный монстр и т.д.).
  10. Сцена сражения выгружается и возобновляется открытый мир.

Типы сражений

MCE поддерживает несколько типов сражений из коробки:

ТипОписание
WildВстреча с одним диким монстром, можно поймать
TrainerСражение с NPC-тренером, нельзя поймать, награда деньгами за победу
DoubleФормат сражения два на два
ScriptedСюжетные сражения с особыми условиями

Тип сражения определяется перечислением BattleType, переданным в BattleParameters.

Прослушивание событий сражения (пользователи DLL)

Если вы используете уровень Lite, Basic или Pro (без исходного кода), вы всё ещё можете реагировать на события сражения через SDK:

using OpenMon.MCE.SDK;

public class MyBattleTracker : MonoBehaviour
{
[Inject] private IBattleSystem battleSystem;

private void OnEnable()
{
battleSystem.OnBattleStarted += HandleBattleStarted;
battleSystem.OnBattleEnded += HandleBattleEnded;
}

private void OnDisable()
{
battleSystem.OnBattleStarted -= HandleBattleStarted;
battleSystem.OnBattleEnded -= HandleBattleEnded;
}

private void HandleBattleStarted()
{
Debug.Log("A battle has started!");
}

private void HandleBattleEnded(bool playerWon)
{
Debug.Log($"Battle ended. Player won: {playerWon}");
}
}

Подробнее о расширении MCE без исходного кода см. в руководстве по публичному API.

Устранение неполадок

ПроблемаРешение
Сражение не запускаетсяПроверьте, что в EncounterTile назначен корректный WildEncountersSet
Чёрный экран после встречиУбедитесь, что сцена сражения добавлена в список сцен Build Settings
Монстр появляется на уровне 0Убедитесь, что Min Level и Max Level установлены в таблице встреч
Нет боевой музыкиПроверьте, что в BattleManagerAudioModule назначены аудиоклипы
Вылет при начале бояЗапустите MCE > Tools > Asset Validation для проверки отсутствующих ссылок в базе данных

Следующие шаги