AbstractGraph 是 NavData 的另一种类型。它们是 NavMesh 中可能路径的抽象轻量级静态表示。
AbstractGraph 用于查找大范围内较长的路径。可以在起始点和结束点使用 AbstractGraph 和仅使用 NavMesh 来查找路径。使用 AbstractGraph 查找路径比仅使用 NavMesh 速度更快。而且,使用 AbstractGraph 可以节省内存和 CPU 时间。
下图显示了在起始点和结束点使用 AbstractGraph 与仅使用 NavMesh 相结合所计算的路径。
下图显示了由于框范围限制而导致仅使用 NavMesh 找不到路径的情况。如果扩大框范围,则由于缺少工作内存而导致寻径失败。
您可以使用指定的单元框仅为 NavData 创建 AbstractGraph。有关单元框的信息,请参见使用固定步长分区或基于栅格的分区。
在默认情况下不会创建 AbstractGraph。若要创建 AbstractGraph,您必须将 m_abstractGraphParams(其为 GeneratorAbstractGraphParameters 成员)中的 m_doGenerateAbstractGraph 设置为 true。
您可以使用一个 AbstractGraph 或多个 AbstractGraph 来覆盖 NavData。若要定义 AbstractGraph 覆盖的单元框的长度,请设置 GeneratorAbstractGraphParameters::m_extentsInNumberOfCells。您可以使用该属性限制具体路径的可能大小。默认情况下设置为 0,此时生成一个 AbstractGraph 以覆盖整个 NavData。
GeneratorAbstractGraphParameters::m_workingMemorySizeLimit 参数指定 WorkingMemory(用于在 AbstractGraph 中计算边成本时运行 MultiDestinationPathFinderQuery)的大小限制(以字节为单位)。
AbstractGraph 是静态的,且在运行时不会考虑动态 NavMesh、NavTag 和 NavGraph 更改。若要将 AStarQuery 设置为遍历或不遍历 AbstractGraph,请调用 SetAbstractGraphTraversalMode(),并传递 PATHFINDER_TRAVERSE_ABSTRACTGRAPHS 或 PATHFINDER_DO_NOT_TRAVERSE_ABSTRACTGRAPHS。NavMesh 上的传播限制为在起始位置和结束位置上由 AbstractGraph 覆盖的单元。
如果使用 AbstractGraph 查找某一路径,则将其设置为 AStarQuery::m_abstractPath 和常用的 AStarQuery::m_path。m_abstractPath 包含 AbstractPath,m_path 包含第一个具体路径(从起始点到第一个 AbstractGraph 节点)。
若要跟随 AbstractPath,请针对下一个 AbstractPath 节点运行 AStarQuery,并查找人物可跟随的下一个具体路径。在 LabEngine 示例库中提供了有关跟随 AbstractGraph 的示例。LabEngine::AbstractPathFollower 类使用以下项创建查询,以查找具体路径: