测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可协议 | MIT |
发布日期最新发布 | 2015年8月 |
SPM支持 SPM | ✗ |
维护者:Christopher Luu。
NavigationMeshGraph
是一种基于定义由 凸多边形 描述的导航网格进行路径查找的 GKGraph
。与 GKObstacleGraph
不同,此图导航使得路径保持在由给定多边形定义的网格上。
GameplayKit
进行路径查找,以确保用户保持在凸多边形网格内创建一个 NavigationMeshPolygon
对象数组,并用它们初始化一个 NavigationMeshGraph
let graph = NavigationMeshGraph(polygons: polygons)
这将遍历多边形,并根据多边形的顶点、它们的质心和边的中点创建一个使用 GKGraphNode2D
的图。然后您可以连接两个节点以找到它们之间的路径,如下所示
let startNode = GKGraphNode2D(point: float2(startPosition))
let endNode = GKGraphNode2D(point: float2(endPosition))
graph.connectNodeToClosestPointOnNavigationMesh(startNode)
graph.connectNodeToClosestPointOnNavigationMesh(endNode)
请注意对 connectNodeToClosestPointOnNavigationMesh
方法的使用,该方法根据导航网格进行节点连接。如果您指定一个不在网格中的节点,它将计算到网格最近点的距离并将节点移动到那里,然后再将其连接到邻居。一旦节点连接,就可以像预期的那样找到路径
let path = graph.findPathFromNode(startNode, toNode: endNode)
查看示例项目以查看图的实际工作情况。在示例中,我使用了 Physics Body Editor 来创建组成导航网格的一组凸多边形。
节点创建远非完美,并且可能需要探讨其他自动网格创建技术,例如 Delauney 三角化方法。