UDN
Search public documentation:

NavigationMeshTechnicalGuideCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 主页 > AI & 导航 > 导航网格物体技术指南

导航网格物体技术指南


概述


这是一个使您的 AI 使用导航网格物体(也称为 nav mesh )的快速指南。要想获得关于虚幻引擎中的导航网格物体系统的介绍,请参照导航网格物体参考指南页面。

导航句柄


所有 PathNode 寻路功能都内置在 Controller 中。基于寻路的导航网格物体的所有新功能都是封装在一个称为导航句柄的自包含对象中。导航句柄本身是一个组件,可以附加到您要寻路到的任何 actor 上。另外,句柄存储了路径搜索的输出结果。那就是它存储了生成的路径,并且可以扩展它来存储任何和您正在进行的路径移动的类型相关的任何东西。

要想使用导航网格物体生成您的 AI 寻路,需要进行如下操作:

  • 实现 Interface_NavigationHandle。
  • 使得 Navigationhandle(导航处理)组件在某处可以访问。

导航句柄功能

导航处理的功能可以粗略地分为三种:

实际寻路功能

寻路是在路径约束和目标点求值器的帮助下执行的。请参照约束及目标点求值器页面了解更多信息。要想进行寻路,您至少需要建立一个约束和目标点求值器。要想完成这个功能,添加一些类似于这样的函数:

function bool GeneratePathTo(Actor Goal, optional float WithinDistance, optional bool bAllowPartialPath)
{
  if (NavigationHandle == None)
  {
    return false;
  }

  AddBasePathConstraints(false);

  class'NavMeshPath_Toward'.static.TowardGoal(NavigationHandle, Goal);
  class'NavMeshGoal_At'.static.AtActor(NavigationHandle, Goal, WithinDistance, bAllowPartialPath);

  return NavigationHandle.FindPath();
}

  • FindPath() - 这个函数将会执行一个循环,并不断运行直到目标点求值器的栈确定了适当的目标或者要处理的节点集合为空(查找了所有的节点)为止。如果搜索成功则返回 true,并且将会把得到的路径存储在您调用 FindPath() 的 NavigationHandle(导航处理)上的 PathCache(路径缓存)中。在自定义的路径搜索的情况下(比如,掩体搜索),目标求值器将根据额外的数据的自身的内部情况来存储这些数据。

路径所遵循的函数

  • SetFinalDestination() - 这个函数设置 NavigationHandle(导航处理)上的 FinalDestination(最终目的地) 参数的值。由于以下两个原因,导致这个函数是必要的: 第一,PathCache(路径缓存)是一系列的边,所以一旦 Actor 到达了最后一个边,我们需要更多的信息来使得 Actor 到达路径的最后一个多边形中的路径的目标点。第二,没有自动为每次路径搜索设置这个参数的原因是当前正在朝向一个目标点的路径上运动的 Actor 可能会进行和到那里的寻路没有关系的路径搜索(比如,在跑动的过程中寻找掩体),所以在这种情况下我们不想清除当前存储在 FinalDestination 中的数据。
    ALERT! 注意: 如果没有设置这个参数,某些目标点求值程序(也就是 NavMeshGoal_At)将会自动地设置它,这仅在传统的寻路情况下使用。
  • GetNextMoveLocation() - 这是路径跟随的最重要的函数。 它决定了您当前沿着路径所在的位置,并计算了实体将要移动到的空间点(也就是计算了传入到 MoveTo() 函数中的值)。

导航网格物体查询函数

有太多的相关函数,以至于不能在这里一一列出。请参照导航网格物体参数来获得关于导航句柄函数的全部列表。 其中几个需要注意函数的是:
  • PointReachable() - 这将会对 NavMesh 生成过程重生成的障碍物网格物体进行线性检测。这个检测过程要比对碰撞几何体的线性检测快很多,同时也比进行正常的可到达性的检测快很多(这涉及到很多线性检测)。
  • GetValidPositionsForBox() - 返回给定范围中的传入框中的全部有效(非重叠的)位置。对于类似于查找 spawn 位置这样的事情是非常有用的。

导航网格物体调试


关于在运行时对导航网格物体寻路进行调试的信息,请参照导航网格物体寻路调试页面。

Pawn 寻路参数


Pawn 本身有一些将会影响那些没有直接与导航网格物体相关的寻路的参数。

下面是一个快速概述:

  • MaxStepHeight - AI 可以‘登上去’的最大垂直高度。(非跳步)
  • MaxJumpHeight - AI 可以跳的最大垂直高度 (它将会确定 AI 尝试跳过障碍物 vs 在它们周围走动的时间)
  • WalkableFloorZ - 认为可以走动的斜坡的法线最大 Z 值。(Pawn 将会在 Z > 这个值的情况下从斜坡上滑下来)

下载


  • 下载一个可以演示说明如何使用 NavigationHandle 路径函数的示例。