• NavMeshAgent 导航网格代理

    NavMeshAgent 导航网格代理

    描述:

    导航网格代理。该组件附加于游戏中移动角色上,允许使用导航网格在场景中进行导航。

    变量说明
    acceleration该代理跟随路径的最大加速度,指定单位/秒^2。
    angularSpeed跟随路径的最大转向速度单位(度/秒)。
    areaMask指定导航网格区域是可行的。该变区域遮挡将会使路径变旧(请参考isPathStale)。
    autoBraking该代理是否自动制动去避免超过目的点?
    autoRepath当现在的路径变成无效时该代理是否尝试获取新路径?
    autoTraverseOffMeshLink该代理是否自动穿过OffMeshLinks?
    avoidancePriority逃避优先级。
    baseOffset对象自身的相对垂直位移。
    currentOffMeshLinkData当前分离网格连接数据。
    desiredVelocity该代理的需求速度包括任何逃避时潜在的贡献(只读)。
    destination获取或者尝试去在世界空间单位中设置代理的目的地。
    hasPath当前代理是否有路径(只读)?
    height代理经过障碍物下方目的高度,等等。
    isOnNavMesh当前代理束缚到导航网格?(只读)
    isOnOffMeshLink当前代理位置是否在OffMeshLink上?(只读)
    isPathStale当前路径是否是旧路径。(只读)
    nextOffMeshLinkData在当前路径上的下一个OffMeshLinkData。
    nextPosition获取或者设置导航网格的模拟仿真位置。
    obstacleAvoidanceType逃避的质量的级别。
    path获取或者设置当前路径属性。
    pathPending该路径在被计算的过程中但是还没准备?(只读)
    pathStatus当前路况的状态(完整,局部或者无效)。
    radius代理的逃避半径。
    remainingDistance在当前路径上代理的位置与目的地之间的距离。(只读)
    speed当跟随路径时的最大移动速度。
    steeringTarget获取当前沿着路径转向的目标(只读)。
    stoppingDistance从目标位置开始,在该距离之内刹车。
    updatePosition获取或者设置变换位置与模拟代理位置同步。默认值为true。
    updateRotation代理是否应该更新方向?
    velocity使用NavMeshAgent 组件的当前速度,或者手动设置速度去控制代理。

    方法说明
    ActivateCurrentOffMeshLink启用或者禁用当前分离网格链接。
    CalculatePath计算出路径指定点并存储结果路径。
    CompleteOffMeshLink在当前分离网格链接上完成运动。
    FindClosestEdge查找导航网格最近的边缘。
    GetAreaCost当穿过特别类型的区域时获取路径计算成本。
    Move应用相对运动到当前位置。
    Raycast在导航网格中朝着目标方向追踪直线路径而不移动代理。
    ResetPath清除当前路径。
    Resume暂停之后沿着当前路径重新恢复运动。
    SamplePathPosition沿着当前路径的样本位置。
    SetAreaCost设置穿越区域的区域类型的成本。
    SetDestination设置或者更新目的地因此触发计算新的路径。
    SetPath分配新路径给该代理。
    Stop该代理沿着它的当前路径的刹车运动。
    Warp弯曲代理提供位置。

    1. NavMeshPath path = new NavMeshPath ();
    2. bool havePath = m_pNavAgent.CalculatePath (m_pTarget.position, path);
    3. float fGrassCost = m_pNavAgent.GetLayerCost (4);
    4. if (fGrassCost == 3) {
    5. }
    6. m_pNavAgent.SetLayerCost(3, 10);
    1. if (m_pNavAgent.isOnOffMeshLink) { // 判断是否到达起点
    2. m_fTimeCount += Time.deltaTime;
    3. Vector3 currtPos = Vector3.Lerp(m_pNavAgent.currentOffMeshLinkData.startPos, m_pNavAgent.currentOffMeshLinkData.endPos, m_fTimeCount);
    4. currtPos.y += Mathf.Sin(Mathf.Clamp01(m_fTimeCount) * Mathf.PI)*4;
    5. transform.position = currtPos;
    6. if(Vector3.Distance(transform.position, m_pNavAgent.currentOffMeshLinkData.endPos) < 0.5f)
    7. {
    8. m_pNavAgent.CompleteOffMeshLink(); // 完成移动后结束移动过程。
    9. }
    10. }

    ?