Система перемещения по сетке
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 | Поднимается со специальным HM | TileType.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) для рисования вашей карты:
- Слой Ground: Базовая местность (дорожки, трава, земля, края воды).
- Слой GroundOverlay: Декорации поверх земли (цветы, камни, тени).
- Слой Collision: Отметьте непроходимые тайлы (стены, деревья, валуны).
Шаг 3: Добавление GridController
- Выберите корневой GameObject Grid.
- Добавьте компонент
GridController. - Он автоматически определит слои тайловой карты и построит карту столкновений.
Шаг 4: Настройка SceneInfo
Для каждой сцены карты нужен компонент SceneInfo (или ScriptableObject SceneInfoAsset):
| Поле | Описание |
|---|---|
| Scene Name | Отображаемое название локации (показывается в заголовке) |
| Region | К какому региону относится эта карта |
| Scene Tag | Теги для игровой логики (например, "Cave", "Town", "Route") |
| BGM | Фоновая музыка для этой карты |
| Wild Encounters | Набор встреч по умолчанию для этой карты |
Особая местность
Мосты
Мосты позволяют персонажам ходить поверх тайлов, которые обычно непроходимы (например, вода):
- Создайте слой тайловой карты для моста с более высоким порядком сортировки.
- Добавьте тайлы моста там, где дорожка пересекает воду.
- Установите
TileTypeвBridgeна этих тайлах. - Персонаж будет ходить по слою моста при входе на него.
Логика моста автоматически обрабатывает Z-порядок -- персонаж отрисовывается выше воды, но ниже перил моста.
Скользкие тайлы (Лёд)
На ледяных тайлах персонаж скользит в направлении движения, пока не столкнётся со стеной или не-ледяным тайлом:
- Установите
TileTypeвSlipperyна ледяных тайлах. MCECharacterControllerпереопределит ввод и продолжит направление движения.- Добавьте стены или препятствия для создания ледяных головоломок.
Уступы
Уступы -- это односторонние тайлы. Персонаж может спрыгнуть вниз, но не может подняться обратно:
- Установите
TileTypeвLedgeи настройте направление (направление прыжка персонажа). - При пересечении уступа воспроизводится короткая анимация прыжка.
- Уступы часто используются для создания коротких путей на маршрутах.
Водопады
По водопадам можно подниматься с соответствующим HM или способностью:
- Установите
TileTypeвWaterfallна тайлах водопада. - Настройте требуемую способность или HM.
- Когда игрок стоит перед водопадом и использует способность, персонаж поднимается.
Межкартовые переходы
Настройка телепортов
Для соединения двух карт:
-
Разместите тайл телепорта или актора телепорта на краю или у двери исходной карты.
-
Настройте телепорт:
- Target Scene: Сцена для загрузки.
- Target Position: Где появится игрок в целевой сцене (координаты тайлов).
- Target Direction: В каком направлении будет смотреть игрок после телепорта.
- Transition Type: Затемнение, дверь, вход в пещеру и т.д.
-
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 направления.
Лучшие практики
- Сохраняйте единообразие слоёв столкновений. Используйте один и тот же тайл столкновений для всей непроходимой местности.
- Тестируйте телепортные соединения в обе стороны. Убедитесь, что можно перейти от A к B и обратно от B к A.
- Используйте SceneTags для логики встреч. Вместо жёсткого кодирования названий карт помечайте карты как "Cave", "Water", "Forest" и т.д.
- Оптимизируйте большие карты. Очень большие тайловые карты (>200x200) могут влиять на производительность. Рассмотрите разделение на несколько связанных сцен.
- Тестируйте с геймпадом. Перемещение по сетке должно быть отзывчивым как на клавиатуре, так и на контроллере.