- 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 | 弯曲代理提供位置。 |
NavMeshPath path = new NavMeshPath ();
bool havePath = m_pNavAgent.CalculatePath (m_pTarget.position, path);
float fGrassCost = m_pNavAgent.GetLayerCost (4);
if (fGrassCost == 3) {
}
m_pNavAgent.SetLayerCost(3, 10);
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(); // 完成移动后结束移动过程。
}
}
?