RTS中的寻路系统一般需要满足有以下几个条件:
1. 效率高,因为rts普遍地图大,单位多,所以处理效率很重要
2. 易编辑,以便于level design
3. 效果真实,如能找出最优(或者是看上去合理)
4. 可以应对动态的游戏世界,例如起建筑
如@王亞暉 所说,一般用于寻路的算法是A Star:
首先是A Star有利用到启发式函数(Heuristic Function)[1],和另一个算法Dijkstra(A Star的无启发函数版)相比可能会更有效率,因为启发函数设计得当,可以大大减少计算的数量。
因为启发函数的估计往往不是精确的,所以A Star [删:不像Dijkstra,] 不一定能找出人类人之上的最优解,但是对于游戏来说,看上去合理就行。
然而用A Star作为寻路算法,仅仅是寻路系统的基本部分。
作为系统,它需要有易编辑的特性。
这就涉及到A Star中每个节点(Node)的表现方式。
最基本的表现方式是方块(Tile),如下图 [2]
![9e41b9b61d81e9a99bef30d8e4f0016d.png](https://img-blog.csdnimg.cn/img_convert/9e41b9b61d81e9a99bef30d8e4f0016d.png)
其中,可以将山洞所占的的几个方块设为“Not Movable”,这样A Star就会不会考虑到这几个方块,系统所生成的路径就不会碰到山洞。
用方块作为A Star节点优点是简单,
不过也有比较多的问题,
第一是,如果地图很大的话,方块就会很多,这样A Star的节点就会大大增加,处理的时间相应地会增大。
第二是,单位的移动只能是上下左右,最多加上斜行,总共八个方向,不够真实
第三是,单位的体积大小不一样的话,大单位的图像可能会覆盖到“Not Movable”部分。以上面的图片为例,一条路径会经过在