Navigation Mesh Technical Guide

1649 篇文章 12 订阅
1277 篇文章 12 订阅

Navigation Mesh Technical Guide


Overview


This is a quick and dirty guide to hooking up your AI to use a navigation mesh (a.k.a.   nav mesh). For an introduction to the Navigation Mesh system in the Unreal Engine, see the   Navigation Mesh Reference.

Navigation Handle


All PathNode path finding functionality was contained in Controller. All the new functionality for navigation mesh based path finding is encapsulated in a self-contained object called a navigation handle. The navigation handle itself is a component and can be attached to any actor with which you'd like to path. In addition the handle stores the output of the path search. That is it stores the generated path, and can be extended to store whatever else is relevant to the types of path traversals you are doing.

To make your AI path find using navigation meshes it needs to:

  • Implement Interface_NavigationHandle.
  • Have a NavigationHandle component accessible somewhere.

Navigation handle functionality

Navigation handle functionality comes in roughly three categories.

Actual path finding functionality
Path finding is performed with the help of path constraints and goal evaluators. See the   Constraints and Goal Evaluators  page for more information. To path find you need at least one constraint and one goal evaluator set up. To do this it's usually a good idea to add some sort of boiler plate function like this:

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() - This function will execute the A* loop and run until the goal evaluator stack determines a proper goal has been found, or the working set is empty (it ran out of nodes to try). It will then return true if the search was a success, and the resulting path will be stored in the PathCache on the NavigationHandle you calledFindPath() on. In more customized path search situations (e.g. cover searches) the goal evaluator can store extra data depending on its own internal considerations.

Path following functions
  • SetFinalDestination() - This function sets the FinalDestination parameter on the NavigationHandle. This is necessary for two reasons. First, the PathCache is a list of edges, so once the Actor reaches the last edge we need more information to get the Actor to the actual goal point of the path in the last poly of the path. Second, the reason this is not set automatically for every path search is that an Actor currently moving on a path toward a goal may do a path search that is not related to actually pathing there (e.g. look for cover while running somewhere) and thus we don't want to clobber the currently stored FinalDestination in this case. 
    ALERT! Note: Certain goal evaluators (namely NavMeshGoal_At) set this automatically if it's not already set as they can only be used in traditional pathing situations.
  • GetNextMoveLocation() - This is the heavy lifter of path following. It will determine where along the path you are currently, and calculate the point in space the entity should be moving toward (e.g. figure out what point to feed to MoveTo())

Navmesh query functions
There are too many to list here. See   Navigation Mesh Reference  for a complete list of navigation handle functions. A couple of note are:
  • PointReachable() - This will do a line check against the obstacle mesh generated by the NavMesh generation process. This is much faster than doing normal line checks against collision geometry, and faster still than doing normal reachability checks (which involve numerous line checks).
  • GetValidPositionsForBox() - This will return all valid (and non overlapping) positions for the passed box within the given bounds. Very useful for things like finding spawn locations.

Nav Mesh Debugging


For information on debugging issues with Navigation Mesh path finding at run time, see the   Nav Mesh Path Debugging  page.

Pawn path finding parameters


There are several parameters on the Pawn itself which will affect path finding that aren't directly related to the navmesh.

Here is a quick overview:

  • MaxStepHeight - Maximum vertical height this Pawn can 'step up'. (non jump step)
  • MaxJumpHeight - Maximum vertical height this Pawn can jump. (this will determine when the Pawn tries to jump over obstacles vs go around them)
  • WalkableFloorZ - Maximum Z value of the normal of a slope considered walkable. (Pawns will slide off of slopes with Z > this value)

Downloads


  • Download an example which demonstrates how to use NavigationHandle path functions.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值