寻路系统

场景设置

需要给场景中静态的物体设置为 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 组件
    动态障碍物

🔚