Unity NavMesh.CalculatePath不起作用



我没有得到方法NavMesh.CalculatePath工作,甚至没有从Unity文档页面复制原始示例。https://docs.unity3d.com/ScriptReference/AI.NavMesh.CalculatePath.html

我添加了一个角的数组长度的调试输出。我得到0

// ShowGoldenPath
using UnityEngine;
using UnityEngine.AI;
public class ShowGoldenPath : MonoBehaviour
{
  public  Transform   target;
  private NavMeshPath path;
  private float       elapsed = 0.0f;
  void Start()
  {
    path    = new NavMeshPath();
    elapsed = 0.0f;
  }
  void Update()
  {
    // Update the way to the goal every second.
    elapsed += Time.deltaTime;
    if (elapsed > 1.0f)
    {
      elapsed -= 1.0f;
      NavMesh.CalculatePath(transform.position, target.position, NavMesh.AllAreas, path);
      Debug.Log("ShowGoldenPath corner count: " + path.corners.Length);
    }
    for (int i = 0; i < path.corners.Length - 1; i++)
      Debug.DrawLine(path.corners[i], path.corners[i + 1], Color.red);
  }
}

我在地平面上创建了一个NavMesh,并将MonoBehavior脚本放在上面的玩家虚拟对象上。然后我创建了一个球体,并将其分配给脚本的target属性。实际上,目标是可以通过NavMesh到达的,但不是直接到达的。

为什么这不能给我一个非零角路径?

我通过在Unity编辑器中增加NavAgent的高度来解决这个问题。

在调试器中跟踪该方法显示CalculatePath声明'navmesh path invalid'。方法返回"false"。

解决步骤:
打开Navigation标签。在Agents卡片中,您可以通过设置名称、半径、高度来添加/编辑代理类型。增加高度,直到CalculatePath方法可以找到代理的位置。

最新更新