在unity中,通常会使用导航网格(Navigation)做寻路,但有时也会对场景直接划分格子,并自己实现A*算法
那他们之间的区别是啥呢?
问题:
角色移动的时候,通常不是在网格上一格格走
因此在非SGL游戏中,会采用 寻路结点 或 导航网格 的形式
1.寻路结点
是关卡设计师在游戏世界中拜访的角色可到达的位置
这些点会被作为图的结点载入内存,边则通过点与点之间的组合自动生成
最大的问题:
在于角色只能在结点的边缘进行移动,地图上会有很多不能走的镂空区域
2.导航网格
可以解决上面的问题
通过凸多边形来表示节点,邻近节点的就是相邻的凸多边形
一般形况下,用远小于寻路结点数量的凸多边形就可以将游戏世界区域表示出来
由于封闭区域可以自由行走,返回的路径会更加自然
算法:
如果两点在相同的三角形中,直接走过去即可
如果两点任何一点不在任何三角形内,就需要做不可达判断
AStar是启发式优化寻路算法的统称,导航网格其实与它并不在同一层级
无论使用凸多边形还是网格,说到底都是对地图信息的一种描述,拓扑信息之后,都可以通过AStar来实现
网友评论