【附源码工程】Unity3D 支持代价的A星寻路和优化(二叉堆,寻路节点合并,相邻节点预先存储)


最近项目中需要自己写a星寻路,上网查阅来一些资料,不是不完整不支持网格权重就是没有优化效率差,于是自己整理优化写了一个,效率比原始没有任何优化的快一个量级(自己的项目中,400格子 优化前 27ms优化后 1.4ms)

思路:

对比http://www.cnblogs.com/yangyxd/articles/5447889.html这篇博客内的原始a星。

A星的消耗主要集中在对寻路节点对探索和回溯,理所当然最显而易见的优化办法就是减少网格数量(用一个大格子替代几个小格子),然后遇事不决先打表(空间换时间),把算法中遍历判断临近节点的那部存在寻路节点自身数据里,这样可以省去运行时的部分消耗,同时数据结用二叉堆节省取最小值的计算成本(不在寻路内进行计算最小值的操作,费时)。



这是格子合并前的 可以看到一个个格子大小相同,格子数量(搜索空间)一共448个。


经过算法合并处理后如下:


格子变成来2*2的大格子和一些填充中间间隙的小格子,经过合并后 格式数量降低到了142个 大幅度缩小了搜索空间,同时在进行小个子合并成大格子之后还把相邻信息记录在格子本身


省去寻路时候便利获取临近格子的计算,尽可能在烘焙的时候一次性计算优化结构,减少寻路时候的开销。


最后附上例子工程,单独抽离寻路部分,临时搭建的演示工程,代码写的很差。。。

https://pan.baidu.com/s/1c1I9FpA

你可能感兴趣的:(算法,unity3d)