Rog*_*ang 2 agent path-finding infinity unity-game-engine navmesh
SetDestination()当我为 NavMeshAgent 和Debug.Log()每一帧设置无法到达的目标位置时NavMeshAgent.remainingDistance,我会获取Infinity一些路径,直到它开始返回浮点数(21.21864、21.0846、20.95449...),直到它尽可能接近目的地,这返回 0。
从 Unity 2019.3 开始,NavMeshAgent.remainingDistance 仍然仅在到达路径的倒数第二个角之后计算,并且代理正在遍历最后一段。在此之前,剩余距离将返回无穷大。可悲的是,这是没有记录的。
这是一个 NavMeshAgent 扩展方法,用于获取任意时刻或路径上任意点的剩余距离:
public static class ExtensionMethods
{
public static float GetPathRemainingDistance(this NavMeshAgent navMeshAgent)
{
if (navMeshAgent.pathPending ||
navMeshAgent.pathStatus == NavMeshPathStatus.PathInvalid ||
navMeshAgent.path.corners.Length == 0)
return -1f;
float distance = 0.0f;
for (int i = 0; i < navMeshAgent.path.corners.Length - 1; ++i)
{
distance += Vector3.Distance(navMeshAgent.path.corners[i], navMeshAgent.path.corners[i + 1]);
}
return distance;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以使用 NavMeshAgent.GetPathRemainingDistance(),而不是使用 NavMeshAgent.remainingDistance。请注意,根据具体情况,这可能会导致性能昂贵,因此在使用它时请记住这一点。
至于你问题的第二部分,我们需要更多关于你的设置的上下文信息,但听起来你的目标位置可能有向上向量的偏移,而代理被限制在 x, z 平面,但这只是猜测。
| 归档时间: |
|
| 查看次数: |
8823 次 |
| 最近记录: |