Ste*_*low 5 c# unity-game-engine
我在 Unity 中有一个场景,我在其中使用 Unity 的导航功能来计算路径并使用NavMeshAgent来行走。我必须对路径稍作修改,然后将其重新分配给代理。
现在,Unity 文档清楚地说明NavMeshAgent.path可以实用地设置(不是只读)。
请参阅此处:https : //docs.unity3d.com/Documentation/ScriptReference/NavMeshAgent-path.html
因此可以创建一个新的NavMeshPath并将其分配给NavMeshAgent。
对我来说不幸的是,NavMeshPath不允许您以任何方式分配Vector3数组,因为corners属性是Read Only。什么...
我需要一个解决方法。任何帮助表示赞赏!
感谢您的时间。
虽然您无法将一组新的 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);
Run Code Online (Sandbox Code Playgroud)
它必须是 for 循环,不能是 foreach。
现在,为了能够生成具有不同数量角点的任意 NavMeshPaths。您可以使用单个代理创建一个看不见的 NavMesh 区域,该代理具有一组点,这些点将生成已知数量的角点,然后您可以使用它们执行任何您想要的操作。
关键是你不能设置角数组,但你可以破坏它已经存在的内容。