一、NavMehAgent组件属性介绍:
- Agent Radius:定义网格和地形边缘的距离
- Agent Height:定义可以通行的最高度
- Max Slope:定义可以爬上楼梯的最大坡度
- Step Height:定义可以登上台阶的最大高度
- Drop Height:允许最大下落距离
- Jump Distance:允许最大的跳跃距离
-
Base offset:组件的竖直方向的偏移量;
-
Speed:角色移动速度;
-
Agular Speed:角色转动角速度;
Acceleration:加速度(加速度是矢量,有大小有方向,在加速时是加速度,减速时是减速的加速度);与角色在转弯时的转动半径有关,加速度越大转动半径越小。
StoppingDistance:距离目标点多远就停止(速度不能太快,加速度不能太小,否则跟目标点距离等于stoppingdistance时停不下来)
Radiu:寻路组件半径;
Height:寻路组件高度;
Quality:(躲避系数)寻路物体前方有障碍物时 该数值越高越会穿过障碍物到达寻找到物体身边
Priority:寻路权重(0-99,值越小优先级越高,优先级低的游戏寻路组件需要绕着他走);
Auto traverse off mesh Link:是否支持off mesh link功能;
Auto repath :自动重新规划路径;
Area Mask:区域覆盖,当前寻路组件没有覆盖的区域,即使有时可行区域,对当前这个组件来说也是不可行区域;与Nav Mesh Area相对应。
1.安装寻路组件AI Navigation
2.将场景中不动的物体勾选Static
点击烘焙
就会出现这样的效果 代表烘焙完成 。注意当地形发生变化时 需要重新烘焙
3.给需要寻路的物体添加NavMeshAgent组件和脚本
private NavMeshAgent agent;
public Transform target;
void Start()
{
agent = GetComponent<NavMeshAgent>();
}
void Update()
{
agent.SetDestination(target.position);
}
运行之后,寻路的物体就会自动根据最佳路径寻找物体
二、Off Mesh Link组件
主要用于不连续的路段进行搭桥,以方便寻路物体通过不连续路段
设置详细如下:
在两个不连续路段相邻处设置两个位置,对任一位置添加Off Mesh Link 组件,设置成功后两个位置之间会有一个较黑的弧线,如下:
设置好Start 和End位置,运行后寻路物体就会自动通过该路段。
对于不连续的路段也可在两者之间添加一个平面,设置静态 烘焙为寻路网格,之后再隐藏该物体也可达到通过不连续路段的效果。
三、Nav Mesh Obstacle寻路动态碰撞
针对与场景中非静态物体,既可运动又可遮挡寻路对象
- Shape:障碍的形状
- Carve:勾选,会重新渲染网格.勾选该属性后,会出现如下三个可以控制的参数
- Move Threshold:[移动阈值]
- 大于该值的移动,才认为是真正发生了移动。
- Time To Stationary:[时间静止]
每间隔多长时间,检查一次该障碍物的位置,如果发生了移动则动态的更新导航
网格的数据 - Carve Only Stationary:[仅雕刻静止物体]
勾选后,则按上面的时间间隔,固定的检查位置,固定时长更新网格数据;
如果不勾选,则是每帧都会检查位置,如果发生位移,立刻更新网格数据。
-
常用API:
- ActivateCurrentOffMeshLink :激活或禁止当前off-MeshLink.
- CalculatePath :计算到某个点的路径并储存
- CompleteOffMeshLink :完成当前offMeshLink的移动
- Move :移动到相对于当前位置的点
- ResetPath :清除当前路径
- SetDestination :设置目标点
- SetPath :设置一条路线
- Warp :瞬移到某点
- remainingDistance:到目标点的距离
- desiredVelocity:期望速度,方向指向的是到达目标点的最短路径的方向
- Stop:停止寻路。
- Resume:继续寻路。