Unity NavMeshPath更改和重新分配

5
我在Unity中有一个场景,使用Unity的导航功能计算路径并使用NavMeshAgent走过它。我必须对路径进行轻微修改,然后重新分配给代理。
现在,Unity文档明确指出NavMeshAgent.path可以通过编程方式设置(非只读)。
在这里查看:https://docs.unity3d.com/Documentation/ScriptReference/NavMeshAgent-path.html 因此,可以创建新的NavMeshPath并将其分配给NavMeshAgent
不幸的是,NavMeshPath不允许以任何方式分配Vector3数组,因为corners属性是只读的。这是怎么回事...
我需要解决这个问题。感谢您的帮助!
谢谢您的时间。
1个回答

3

虽然你无法将新的Vector3集合分配给NavMeshPath.corners,但是可以更改NavMeshPath的corners。

因此,不要自己创建,而是让代理生成具有正确数量角落的路径,然后根据需要更改这些角落,然后可以在NavMeshAgent.SetPath中使用该路径。

我正在使用它来强制移动为方块状,而不是尽可能平滑。

示例

Vector3 vHit = WhereWeWantToGo;
var vNavMeshPath = new NavMeshPath();
mAgent.CalculatePath(vHit, vNavMeshPath);

for(var vIndex = 0;vIndex < vNavMeshPath.corners.Length;vIndex++){
    var vPoint = vNavMeshPath.corners[vIndex];
    vPoint.x = ChangeValue(vPoint.x);
    vPoint.y = ChangeValue(vPoint.y);
    vPoint.z = ChangeValue(vPoint.z);
}

mAgent.SetPath(vNavMeshPath);

必须使用for循环而不是foreach。

现在,为了能够生成具有不同角数的任意NavMesh路径。您可以使用一个单一代理人和一组点来创建一个看不见的NavMesh区域,这将生成已知数量的角,然后您可以对其进行任何操作。

关键是您不能设置角数组,但您可以操纵其中已经存在的内容。


这个方法似乎不起作用了(不再起作用)。数组中的Vector3保持不变。 - Weckar E.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接