在遵循航点UNITY时,AI面临奇怪的方向

时间:2017-01-25 16:05:08

标签: c# unity3d artificial-intelligence path-finding a-star

我的问题是,每当它试图向当前的航路点移动时,它就会面向奇怪的方向,并且不会完全遵循这条路径。

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)

1 个答案:

答案 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可能超过或者没有完全达到目标向量,并且当将鼠标悬停在目标向量上时会动摇并大幅改变方向。