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

Система перемещения по сетке

MCE использует тайловую систему перемещения по сетке, построенную на Unity Tilemap. Игрок и NPC перемещаются на один тайл за раз по дискретной сетке, с обработкой столкновений, эффектов местности и межкартовых переходов системой сетки.

Основные компоненты

GridController

GridController -- менеджер тайловой сетки для каждой сцены. Он:

  • Поддерживает карту столкновений для текущей сцены.
  • Отслеживает, какие тайлы проходимы, заблокированы или имеют особые свойства.
  • Обрабатывает тайловые запросы столкновений (может ли персонаж перейти на тайл X,Y?).
  • Управляет данными тайлов для встреч, телепортов и особой местности.

Каждая сцена имеет один GridController, прикреплённый к корню сетки/тайловой карты.

MCECharacterController

MCECharacterController управляет перемещением любого персонажа (игрока или NPC) по сетке:

  • Привязка к сетке: Персонажи перемещаются ровно на один тайл за шаг.
  • 4-направленное движение: Вверх, Вниз, Влево, Вправо. Без диагонального движения.
  • Отрисовка спрайтов: Автоматически обновляет направление спрайта и анимацию ходьбы.
  • Проверка столкновений: Запрашивает GridController перед каждым движением.
  • Скорость движения: Настраиваемая скорость ходьбы с опциональным бегом.

PlayerCharacter

PlayerCharacter расширяет MCECharacterController функциями, специфичными для игрока:

  • Обработка ввода (клавиатура и геймпад).
  • Триггеры взаимодействия (нажатие кнопки действия перед NPC/объектом).
  • Подсчёт шагов для встреч.
  • Модификаторы скорости бега/велосипеда.
  • Координация с монстром-следовником.

GlobalGridManager

GlobalGridManager управляет межкартовой навигацией:

  • Управляет телепортными тайлами для переходов между сценами.
  • Обрабатывает аддитивную загрузку сцен для связанных карт.
  • Сохраняет состояние игрока при переходах.
  • Управляет экраном загрузки / переходом затемнения.

Типы тайлов

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

Тип тайлаОписаниеРеализация
NormalСтандартный проходимый тайлПо умолчанию
BlockedНепроходимыйСлой Collision тайловой карты
GrassПроходимый, запускает проверки встречКомпонент EncounterTile
WaterТребует Surf для преодоленияTileType.Water
LedgeМожно пересечь только в одном направлении (прыжок вниз)TileType.Ledge + направление
BridgeПозволяет ходить поверх других тайлов на другом слоеTileType.Bridge
Slippery (Ice)Персонаж скользит до столкновения с препятствиемTileType.Slippery
WaterfallПоднимается со специальным HMTileType.Waterfall
WarpПереход в другую сценуКонфигурация телепорта
SpinningЗаставляет персонажа вращаться в направленииTileType.Spinning

Настройка карты

Шаг 1: Создание структуры тайловой карты

Карты MCE используют стандартную иерархию Unity Tilemap:

Grid (Grid component)
└── Ground (Tilemap, TilemapRenderer, sorting order 0)
└── GroundOverlay (Tilemap, TilemapRenderer, sorting order 1)
└── Collision (Tilemap, TilemapCollider2D)
└── Encounters (EncounterTile components)
└── Actors (NPC GameObjects)

Шаг 2: Рисование карты

Используйте Tile Palette (Window > 2D > Tile Palette) для рисования вашей карты:

  1. Слой Ground: Базовая местность (дорожки, трава, земля, края воды).
  2. Слой GroundOverlay: Декорации поверх земли (цветы, камни, тени).
  3. Слой Collision: Отметьте непроходимые тайлы (стены, деревья, валуны).

Шаг 3: Добавление GridController

  1. Выберите корневой GameObject Grid.
  2. Добавьте компонент GridController.
  3. Он автоматически определит слои тайловой карты и построит карту столкновений.

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

Для каждой сцены карты нужен компонент SceneInfo (или ScriptableObject SceneInfoAsset):

ПолеОписание
Scene NameОтображаемое название локации (показывается в заголовке)
RegionК какому региону относится эта карта
Scene TagТеги для игровой логики (например, "Cave", "Town", "Route")
BGMФоновая музыка для этой карты
Wild EncountersНабор встреч по умолчанию для этой карты

Особая местность

Мосты

Мосты позволяют персонажам ходить поверх тайлов, которые обычно непроходимы (например, вода):

  1. Создайте слой тайловой карты для моста с более высоким порядком сортировки.
  2. Добавьте тайлы моста там, где дорожка пересекает воду.
  3. Установите TileType в Bridge на этих тайлах.
  4. Персонаж будет ходить по слою моста при входе на него.

Логика моста автоматически обрабатывает Z-порядок -- персонаж отрисовывается выше воды, но ниже перил моста.

Скользкие тайлы (Лёд)

На ледяных тайлах персонаж скользит в направлении движения, пока не столкнётся со стеной или не-ледяным тайлом:

  1. Установите TileType в Slippery на ледяных тайлах.
  2. MCECharacterController переопределит ввод и продолжит направление движения.
  3. Добавьте стены или препятствия для создания ледяных головоломок.

Уступы

Уступы -- это односторонние тайлы. Персонаж может спрыгнуть вниз, но не может подняться обратно:

  1. Установите TileType в Ledge и настройте направление (направление прыжка персонажа).
  2. При пересечении уступа воспроизводится короткая анимация прыжка.
  3. Уступы часто используются для создания коротких путей на маршрутах.

Водопады

По водопадам можно подниматься с соответствующим HM или способностью:

  1. Установите TileType в Waterfall на тайлах водопада.
  2. Настройте требуемую способность или HM.
  3. Когда игрок стоит перед водопадом и использует способность, персонаж поднимается.

Межкартовые переходы

Настройка телепортов

Для соединения двух карт:

  1. Разместите тайл телепорта или актора телепорта на краю или у двери исходной карты.

  2. Настройте телепорт:

    • Target Scene: Сцена для загрузки.
    • Target Position: Где появится игрок в целевой сцене (координаты тайлов).
    • Target Direction: В каком направлении будет смотреть игрок после телепорта.
    • Transition Type: Затемнение, дверь, вход в пещеру и т.д.
  3. GlobalGridManager обрабатывает переход:

    • Затемняет экран.
    • Выгружает текущую сцену.
    • Аддитивно загружает целевую сцену.
    • Размещает игрока в целевой позиции.
    • Восстанавливает изображение.

Соединения карт (бесшовные)

Для карт, соединяющихся напрямую (например, Маршрут 1 соединяется с Маршрутом 2 на северном краю):

  • Разместите тайлы телепорта вдоль всего соединяющего края.
  • Установите все телепорты на одну целевую сцену с соответствующими позициями.
  • Используйте быстрое затемнение для перехода.

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

На компоненте PlayerCharacter:

ПолеОписаниеПо умолчанию
Walk SpeedТайлов в секунду при ходьбе4
Run SpeedТайлов в секунду при беге8
Bike SpeedТайлов в секунду на велосипеде12
Can RunМожет ли игрок бегать (кнопка B)true
Has BikeРазблокирован ли велосипедfalse
Step CounterОтслеживает общее количество шагов для встреч и высиживания яицавто

Монстры-следовники

MCE поддерживает систему следования, где первый монстр в отряде игрока ходит за ним в открытом мире:

  • MonsterFollowerController управляет позицией и спрайтом следовника.
  • Следовник следует по пути движения игрока с задержкой в один тайл.
  • Спрайты следовников настраиваются для каждого вида в MonsterEntry.
  • Игрок может взаимодействовать со своим следовником (повернуться и нажать кнопку действия), чтобы увидеть текстовую реакцию.
Спрайты следовников

Если для вида монстра не назначен спрайт следовника в открытом мире, следовник не появится. Используйте Art Studio для генерации спрайтлистов следовников или создайте их вручную как листы циклов ходьбы на 4 направления.

Лучшие практики

  1. Сохраняйте единообразие слоёв столкновений. Используйте один и тот же тайл столкновений для всей непроходимой местности.
  2. Тестируйте телепортные соединения в обе стороны. Убедитесь, что можно перейти от A к B и обратно от B к A.
  3. Используйте SceneTags для логики встреч. Вместо жёсткого кодирования названий карт помечайте карты как "Cave", "Water", "Forest" и т.д.
  4. Оптимизируйте большие карты. Очень большие тайловые карты (>200x200) могут влиять на производительность. Рассмотрите разделение на несколько связанных сцен.
  5. Тестируйте с геймпадом. Перемещение по сетке должно быть отзывчивым как на клавиатуре, так и на контроллере.