C# 统一路径更改和重新分配

C# 统一路径更改和重新分配,c#,unity3d,C#,Unity3d,我在Unity中有一个场景,我使用Unity的导航功能来计算路径,并使用NavMeshAgent来行走。 我必须稍微修改路径,然后将其重新分配给代理 现在,Unity文档清楚地表明,NavMeshAgent.path可以实际设置(而不是只读) 请看这里: 因此,可以创建一个新的NavMeshPath并将其分配给NavMeshAgent 不幸的是,NavMeshPath不允许您以任何方式分配Vector3数组,因为corners属性是只读的。什么是 我需要解决这个问题。感谢您的帮助 感谢您抽出时间

我在Unity中有一个场景,我使用Unity的导航功能来计算路径,并使用NavMeshAgent来行走。 我必须稍微修改路径,然后将其重新分配给代理

现在,Unity文档清楚地表明,NavMeshAgent.path可以实际设置(而不是只读)

请看这里:

因此,可以创建一个新的NavMeshPath并将其分配给NavMeshAgent

不幸的是,NavMeshPath不允许您以任何方式分配Vector3数组,因为corners属性是只读的。什么是

我需要解决这个问题。感谢您的帮助


感谢您抽出时间。

虽然您无法将一组新矢量3指定给NavMeshPath.corners,但您可以更改NavMeshPath的角点

因此,与其自己创建路径,不如让代理生成具有正确角数的路径,然后根据需要更改这些角,然后可以在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);
Vector3 vHit=我们想去的地方;
var vNavMeshPath=新的NavMeshPath();
mAgent.CalculatePath(vHit,vNavMeshPath);
对于(var-vIndex=0;vIndex
它必须是for循环,不能是foreach循环

现在,为了能够生成具有不同角数的任意NavMesh路径。你可以用一个单独的代理制作一个看不见的NavMesh区域,该代理具有一组点,这些点将生成已知数量的角点,然后你可以用这些角点做任何你想做的事情

关键是你不能设置角点数组,但是你可以搞乱其中已经存在的东西