我的问题是,每当它试图向当前的航路点移动时,它就会面向奇怪的方向,并且不会完全遵循这条路径。
IEnumerator FollowPath() {
Vector3 currentWaypoint = path[0];
while (true) {
//transform.LookAt (currentWaypoint);
if (transform.position == currentWaypoint) {
PathRequestManager.RequestPath(transform.position,target.position,OnPathFound);
targetIndex=0;
targetIndex ++;
//Debug.Log(currentWaypoint);
if (targetIndex >= path.Length) {
targetIndex =0;
path = new Vector3[0];
//yield break;
}
currentWaypoint = path[targetIndex];
}
transform.LookAt (currentWaypoint);
transform.position = Vector3.MoveTowards(transform.position,currentWaypoint,speed * Time.deltaTime);
yield return null;
}
}
目前使用* pathfinding。完整的源代码可在此处找到:https://github.com/SebLague/Pathfinding
当它到达当前航点时,它会随机改变方向或随机面向方向,而不会经过下一个航路点。 (Screenshot)
答案 0 :(得分:1)
在代码的这一部分,targetIndex
将始终评估为1
targetIndex=0;
targetIndex ++;
所以基本上,它永远不会超过第一个航路点。
另外,我建议不要使用
if (transform.position == currentWaypoint)
你会这样做:
float threshold = 0.1f; // Adjust to your preference
if ((currentWaypoint - transform.position).sqrMagnitude < threshold)
这是因为我认为MoveTowards
可能超过或者没有完全达到目标向量,并且当将鼠标悬停在目标向量上时会动摇并大幅改变方向。