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

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

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. Тестируйте с геймпадом. Перемещение по сетке должно быть отзывчивым как на клавиатуре, так и на контроллере.