Пользовательские типы тайлов
Эта страница описывает внутренний код движка, доступный исключительно лицензиатам редакций Source и Studio.

Тайлы — тоже данные: генератор ниже записывает те же ассеты тайлмапа, которые вы нарисовали бы вручную.
MCE использует систему Tilemap Unity с собственным слоем данных, сопоставляющим каждый ассет тайла с типом движения и боевым сценарием. Эта страница охватывает архитектуру системы тайлов и способы её расширения пользовательским поведением тайлов.
Обзор архитектуры
У системы тайлов три слоя:
- Перечисление
TileType— задаёт семантику движения дляGridController. TileData/SingleTileData— база данных ScriptableObject, сопоставляющая каждый ассетTileBaseсTileTypeиBattleScenario.- Поведения тайлов — компоненты MonoBehaviour на GameObject тайлов, реализующие
ICharacterInteractingTileилиITileTypeOverrideдля добавления логики времени выполнения.
TileBase (Unity asset)
└─ registered in TileData ─► SingleTileData { Tile, TileType, BattleScenario }
└─ instantiated object ─► MonoBehaviour(s) implementing ICharacterInteractingTile
Перечисление TileType
Находится в Assets/OpenMon/Core/Runtime/World/TileType.cs:
public enum TileType
{
NonExistent, // Tile has no data -- treated as void
Walkable, // Normal ground the player can traverse
NonWalkable, // Solid obstacle (walls, trees, rocks)
Jumpable, // Ledge the player can jump over (one-way)
Bridge, // Bridge surface (layered above water)
BridgeEntrance, // Transition tile between ground and bridge
Water, // Swimmable/surfable water
Waterfall, // Vertical water the player can climb
Slippery, // Ice -- forces movement until hitting an obstacle
WalkableNotBikable // Walkable on foot but not on a bicycle
}
GridController.GetTypeOfTileDirectlyBelowSortOrder() определяет эффективный тип для любой мировой позиции, просматривая тайлмапы от наивысшего порядка сортировк и к низшему, сначала проверяя компоненты ITileTypeOverride, а затем обращаясь к поиску в TileData.
Добавление нового значения TileType
- Добавьте своё значение в перечисление
TileType(например,Quicksand). - Обработайте его в логике движения
MCECharacterController(блоки switch/if, ветвящиеся по типу тайла). - Зарегистрируйте тайлы этого типа в ассете
TileDataчерез Inspector.
Система TileData
TileData (Assets/OpenMon/Core/Runtime/World/TileData.cs) — это ScriptableObject, содержащий все тайлы проекта:
[CreateAssetMenu(menuName = "MCE/Maps/TileData", fileName = "TileData")]
public class TileData : OpenMonScriptable<TileData>
{
[SerializeField]
private List<SingleTileData> TileDataCollection = new();
}
Каждая запись — это SingleTileData:
[Serializable]
public class SingleTileData
{
public TileBase Tile; // Reference to the Unity tile asset
public TileType Type; // Movement semantics
public BattleScenario BattleScenario; // Visual theme for battles on this tile
}
Утилиты редактора
TileData предоставляет несколько кнопок Inspector (через [Button] из NovaInspector):
| Кнопка | Назначение |
|---|---|
| AddGroup | Пакетно добавляет список тайлов с одним и тем же типом и боевым сценарием |
| Populate | Сканирует проект на все ассеты TileBase и добавляет недостающие (с пометкой NonExistent) |
| CheckInvalid | Пишет ошибки для тайлов, всё ещё помеченных как NonExistent или не имеющих BattleScenario |
| RemoveColliders | Убирает физические коллайдеры из всех записей RuleTile (MCE использует собственные столкновения на сетке) |
| RemoveNulls | Очищает записи, ассет тайла которых был удалён |