UE代码-游戏AI-寻路系统(待更新)

将起点与终点坐标转化为对应Poly:

Detour是用Poly来寻路的,根据Poly上的边与点来算开销,以相邻的Poly来延申。
task提供了起点与终点坐标位置,所以需要先将坐标转化为对应的Poly才能开始寻路。
找poly的方法是用坐标定位到附近的Tiles,检查并收集Tiles中的Polys。
最后遍历所有Polys,筛选出离坐标点最近的Poly作为目标点的凸包。

InitPathfinding()//初始化起点与终点的Poly
	findNearestPoly()//找距离坐标最近的Poly
		queryPolygons()//提取坐标附近的Polys
		closestPointOnPoly()//遍历每个Poly,在Poly中找到距离Pos最近的点 ,以得到最近的Poly
    		closestPointOnPolyInTile()//同上
1. queryPolygons():

center为坐标,检查center-extents到center+extents矩形区域内的Tiles,extents是NavMesh中的属性。(根据AABB找出所有可能相交的Tile)
得到minx,miny,maxx,maxy,表示x,y的取值范围,Ue5中Tiles和平常的二维建图方法差不多,也是x,y就可以确定一个区域。
遍历x,y区域内的所有层Tiles,找到所有合法的Poly并加入polys中。

calcTileLoc();//将坐标传入,得到坐标位置对应Tile的x,y表示。
queryPolygonsInTile();//检查受检区域该层的Tile中
2. closestPointOnPolyInTile():
  1. 如果Poly是off-meshconnect的话,直接求点到它两个端点的距离,off-meshconnect没有多边形。
  2. 用dtClosestHeightPointTriangle()求坐标到三角形的投影,如果非法则会返回false(如三角形在坐标上面,说明这个三角形在天上,那这个三角形肯定不是最近的)
  3. 再结合平面距离求最近点。
dtClosestHeightPointTriangle();//求点到三角形的投影距离

得到两个Poly后,开始寻路:

findpath()//使用A*寻路的具体逻辑
posted @ 2022-08-26 16:41  ccsu_madoka  阅读(419)  评论(0编辑  收藏  举报