第一步下载AI Navigation
第二部打开Navigation
第三步 将场景中的建筑或者不需要移动的物体设置为静态
第四步点击Navigation面板的back,即可自动生成寻路网格。
第五步选择你需要移动的物体,添加Nav Mesh Agent组件
第六步通过脚本使物体自己寻路
target为你想要移动的终点物体。
使用GetComponent<NavMeshAgent>().SetDestination(target.position);是角色朝着目标运动
属性介绍
- Agent Radius:定义网格和地形边缘的距离
- Agent Height:定义可以通行的最高度
- Max Slope:定义可以爬上楼梯的最大坡度
- Step Height:定义可以登上台阶的最大高度
- Drop Height:允许最大下落距离
- Jump Distance:允许最大的跳跃距离
-
Agent Type 寻路网格类型 与Navigation面板相对应,默认为Humanoid,可以自己添加网格类型。
-
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相对应。
-
Area Mask 还可以通过代码控制,详解请观看下列视频
Off Mesh Link介绍
主要作用将不连续的路段,进行搭桥。
在工程中创建两个空物体然后拖到Off Mesh Link组件面板的Start和End位置。
Nav Mesh Obstacle寻路动态碰撞
-
如果出现障碍物的话,一般也是设置成
静态
,参与Navigation的导航烘焙
,这样我们角色导航时不会与静态物体发生碰撞
-
但是如果我们的障碍物不是静态的,是
动态
的时候,比如我们是通过代码实例化出的一个物体,并没有参与导航烘焙
-
那这个时候就需要
Nav Mesh Obstalce
组件来提供这个功能了!
- Shape:选择障碍的几何形状
- Carve:如果勾选,会重新渲染网格.勾选上该属性后,会出现如下三个可以控制的参数
- Move Threshold:[移动阈值]
大于该值的移动,才认为是真正发生了移动。 - Time To Stationary:[时间静止]
每间隔多长时间,检查一次该障碍物的位置,如果发生了移动则动态的更新导航
网格的数据 - Carve Only Stationary:[仅雕刻静止物体]
勾选后,则按上面的时间间隔,固定的检查位置,固定时长更新网格数据;
如果不勾选,则是每帧都会检查位置,如果发生位移,立刻更新网格数据。 -
unityAI寻路组件
常用API:
- ActivateCurrentOffMeshLink :激活或禁止当前off-MeshLink.
- CalculatePath :计算到某个点的路径并储存
- CompleteOffMeshLink :完成当前offMeshLink的移动
- Move :移动到相对于当前位置的点
- ResetPath :清除当前路径
- SetDestination :设置目标点
- SetPath :设置一条路线
- Warp :瞬移到某点
- remainingDistance:到目标点的距离
- desiredVelocity:期望速度,方向指向的是到达目标点的最短路径的方向
- Stop:停止寻路。
- Resume:继续寻路。