【发布时间】:2016-11-20 23:40:40
【问题描述】:
在我的场景中,我的 NavMesh 位于中心(黄色的那个),并设置了 3 个要跟踪的立方体。我希望 NavMesh 在所有立方体中找到最近且路径最短的那个并开始跟随它。我已经编写了这样做的代码,但它的行为很奇怪,我看不出它有什么问题,但显然有些问题。发生的事情是,当我单击播放并将立方体保持原样时,NavMesh 实际上会找到到最近的立方体的路径并开始朝它前进(cube3),但是当它几乎到达它时,NavMesh 很难转身开始走向立方体 1,这显然不是更近的那个。
这是我的代码。 PathLength 工作得很好。我认为问题出在 CalcPath 函数中。
float PathLength(Vector3 target){
NavMeshPath path = new NavMeshPath ();
myNavMesh.CalculatePath (target, path);
int i = 1;
float currentPathLength = 0;
Vector3 lastCorner;
Vector3 currentCorner;
lastCorner = path.corners [0];
while (i < path.corners.Length) {
currentCorner = path.corners [i];
currentPathLength += Vector3.Distance (lastCorner, currentCorner);
Debug.DrawLine (lastCorner, currentCorner, Color.red,1f);
lastCorner = currentCorner;
i++;
}
return currentPathLength;
}
void CalcPath(){
Vector3 closestTarget = Vector3.zero;
float lastPathLength = Mathf.Infinity;
float currentPathLength = 0;
foreach (GameObject player in GameObject.FindGameObjectsWithTag("Player")) {
currentPathLength = PathLength (player.transform.position);
if (currentPathLength < lastPathLength) {
closestTarget = player.transform.position;
}
lastPathLength = currentPathLength;
}
myNavMesh.SetDestination (closestTarget);
}
【问题讨论】:
标签: c# unity3d monodevelop path-finding