【问题标题】:Unity NavMeshPath change and reassignUnity NavMeshPath 更改和重新分配
【发布时间】:2015-07-04 23:00:54
【问题描述】:

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

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

请看这里:https://docs.unity3d.com/Documentation/ScriptReference/NavMeshAgent-path.html

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

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

我需要一个解决方法。任何帮助表示赞赏!

感谢您的宝贵时间。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    虽然您不能将一组新的 Vector3 分配给 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);
    

    必须是 for 循环,不能是 foreach。

    现在,为了能够生成具有各种角的任意 NavMeshPath。您可以使用具有一组点的单个代理创建一个看不见的 NavMesh 区域,这些点将生成已知数量的角,然后您可以随心所欲地做任何事情。

    关键是你不能设置角数组,但你可以把里面的东西弄脏。

    【讨论】:

    • 此方法似乎不起作用(不再)。数组中的 Vector3 保持不变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    相关资源
    最近更新 更多