• 寻路系统
    • 场景设置
    • 组件

    寻路系统

    场景设置

    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. 动态障碍物

    ?