MapGridInUnity
MapGridInUnity copied to clipboard
English | 简体中文
MapGridInUnity
一个通用的游戏地图解决方案
设计思路解析
主要模块
最小堆最大堆模块
该模块主要是为后续寻路算法做支持的,其内部使用了列表作为实际存储容器,列表元素需要实现IComparable
接口,算法通过接口内的CompareTo
方法对堆内元素做排序调整。
通用的地图模块
该模块做到了将地图数据与地图显示完全抽离,模块中抽离了一系列地图相关的接口,比如IMapGrid
,IMapShow
, INode
, IPathNode
,INodeEntity
等等,每个接口负责定义实现类应该要有什么功能。本模块借助接口来实现地图模块的通用性,模块中各个类只依赖接口内方法,类型则通过依赖注入的形式来设置。
-
IMapGrid
: 定义了地图数据类的常用的属性和必要的方法。 -
IMapShow
: 定义了地图显示相关的内容,比如设置地图节点GameObject
,绑定地图数据,获取显示对象与位置等等。 -
INode
: 定义了一个最简单的节点应该要包含什么内容。 -
IPathNode
: 定义了可寻路的节点应该包含什么内容,该接口实现INode
的全部内容,并在该基础上增加了寻路的一些必要内容,比如代价值,父节点,是否可通行等等。 -
INodeEntity
: 定义了节点的显示接口,比如高亮,还原等等。
寻路模块
该模块中包含了普通的A星寻路算法和经过最小堆优化的A星算法,在优化算法中,引入了最小堆来快速从Open列表中取出代价最小的节点,引入SessionId来加快节点是否在Open列表与Close列表的判断。
Gif示例
创建生成地图配置
创建地图
地图起点是否需要偏移
寻路
地图高亮
示例图
六边形地图高亮范围内的格子
六边形地图高亮指定方向上的格子
六边形地图高亮扇形范围内的格子
网格地图高亮范围内的格子
网格地图高亮指定方向上的格子
网格地图高亮扇形范围内的格子
六边形地图寻路
四方向网格地图寻路
八方向网格地图寻路
系统类图
路线图
- [x] 增加地图模块的结构类图。
- [x] 图文或者视频对整个模块做拆解。
- [ ] 增加寻路算法测试场景。
- [ ] 增加TileMap示例。
- [ ] 基于Unity UI Elements的地图编辑器。