网格移动系统
MCE 使用基于 Unity Tilemap 构建的基于地块的网格移动系统。玩家和 NPC 在离散网格上每次移动一个地块,碰撞检测、地形效果和跨地图切换均由网格系统处理。
核心组件
GridController
GridController 是每个场景的地块网格管理器。它:
- 维护当前场景的碰撞地图。
- 追踪哪些地块可行走、被阻挡或具有特殊属性。
- 处理基于地块的碰撞查询(角色能否移动到 X,Y 地块?)。
- 管理遭遇、传送和特殊地形的地块数据。
每个场景在其网格/Tilemap 根节点上都有一个 GridController。
MCECharacterController
MCECharacterController 处理网格上任何角色(玩家或 NPC)的移动:
- 网格对齐移动:角色每步精确移动一个地块。
- 四方向移动:上、下、左、右。不支持对角线移动。
- 精灵图渲染:自动更新精灵图方向和行走动画。
- 碰撞检测:每次移动前查询
GridController。 - 移动速度:可配置的行走速度,支持可选的奔跑。
PlayerCharacter
PlayerCharacter 扩展了 MCECharacterController,添加了玩家特定的功能:
- 输入处理(键盘和手柄)。
- 交互触发(面向 NPC/物体时按下互动按钮)。
- 遭遇步数计数。
- 奔跑/骑行速度修正。
- 跟随怪兽协调。
GlobalGridManager
GlobalGridManager 处理跨地图导航:
- 管理在场景之间切换的传送地块。
- 处理连接地图的叠加场景加载。
- 在切换过程中保持玩家状态。
- 管理加载画面/淡入淡出过渡。
地块类型
MCE 支持多种地块行为:
| 地块类型 | 描述 | 实现方式 |
|---|---|---|
| 普通 | 标准可行走地块 | 默认 |
| 阻挡 | 不可行走 | 碰撞 Tilemap 图层 |
| 草地 | 可行走,触发遭遇检查 | EncounterTile 组件 |
| 水面 | 需要冲浪才能通过 | TileType.Water |
| 悬崖 | 只能单向通过(向下跳) | TileType.Ledge + 方向 |
| 桥梁 | 允许在不同图层的地块上行走 | TileType.Bridge |
| 滑冰(冰面) | 角色滑行直到碰到障碍物 | TileType.Slippery |
| 瀑布 | 使用特定 HM 可攀爬 | TileType.Waterfall |
| 传送 | 切换到另一个场景 | 传送配置 |
| 旋转 | 强制角色向某个方向旋转 | TileType.Spinning |