寻路系统
场景设置
需要给场景中静态的物体设置为 Navigation Static
给需要实现寻路的角色添加 NavMesh Agent 组件
using UnityEngine.AI; // Unity5.x中需引用该命名空间
组件
NavMesh Agent 组件
可以在烘焙的网格表面进行寻路
面板参数 | 说明 |
---|---|
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 | 该物体可以行进的网格层掩码。 |
OffMeshLink 组件
在不相连的网格表面上创建连接点
可以自己实现连接的运动
// 在Unity5.x版本需要导入命名空间才能使用NavMeshAgent
// using UnityEngine.AI;
if (m_pNavAgent.isOnOffMeshLink) { // 判断是否到达起点
m_fTimeCount += Time.deltaTime;
Vector3 currtPos = Vector3.Lerp(m_pNavAgent.currentOffMeshLinkData.startPos, m_pNavAgent.currentOffMeshLinkData.endPos, m_fTimeCount);
currtPos.y += Mathf.Sin(Mathf.Clamp01(m_fTimeCount) * Mathf.PI)*4;
transform.position = currtPos;
if(Vector3.Distance(transform.position, m_pNavAgent.currentOffMeshLinkData.endPos) < 0.5f)
{
m_pNavAgent.CompleteOffMeshLink(); // 完成移动后结束移动过程。
}
}
NavMesh Obstacle 组件
动态障碍物
🔚