寻路系统

场景设置

  1. 需要给场景中静态的物体设置为 Navigation Static
  2. 给需要实现寻路的角色添加 NavMesh Agent 组件
  3. using UnityEngine.AI; // Unity5.x中需引用该命名空间

组件

  1. NavMesh Agent 组件
  2. 可以在烘焙的网格表面进行寻路
面板参数说明
Radius物体的半径。注意烘焙时候的半径不能小于这个半径,否则夹缝通不过。
Speed物体的行进最大速度。
Acceleration物体的行进加速度。
Angular Speed行进过程中转向时的角速度。
Stopping Distance距离目标点小于多远距离后便停止行进。
Auto Traverse Off Mesh Link是否采用默认方式度过连接路径。
Auto Repath在行进因某些原因中断的情况下,是否重新开始寻路。
Height物体的高度。
Base Offset碰撞模型和实体模型之间的垂直偏移量。
Obstacle Avoidance Type障碍躲避的表现等级。Nono选项为不躲避障碍。另外,等级越高则躲避效果越好,但消耗的性能也越多。
Avoidance Priority躲避优先级。
NavMesh Walkable该物体可以行进的网格层掩码。
  1. OffMeshLink 组件
  2. 在不相连的网格表面上创建连接点
  3. 可以自己实现连接的运动
  1. // 在Unity5.x版本需要导入命名空间才能使用NavMeshAgent
  2. // using UnityEngine.AI;
  3. if (m_pNavAgent.isOnOffMeshLink) { // 判断是否到达起点
  4. m_fTimeCount += Time.deltaTime;
  5. Vector3 currtPos = Vector3.Lerp(m_pNavAgent.currentOffMeshLinkData.startPos, m_pNavAgent.currentOffMeshLinkData.endPos, m_fTimeCount);
  6. currtPos.y += Mathf.Sin(Mathf.Clamp01(m_fTimeCount) * Mathf.PI)*4;
  7. transform.position = currtPos;
  8. if(Vector3.Distance(transform.position, m_pNavAgent.currentOffMeshLinkData.endPos) < 0.5f)
  9. {
  10. m_pNavAgent.CompleteOffMeshLink(); // 完成移动后结束移动过程。
  11. }
  12. }
  1. NavMesh Obstacle 组件
  2. 动态障碍物

?