我没有得到方法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
方法可以找到代理的位置。