在我的场景中,我的NavMesh位于中心(黄色),其中设置了3个要跟踪的立方体。我希望NavMesh在所有多维数据集中找到距离最短的导航路径,并开始追踪它。我已经编写了代码来这样做,但是它的行为很奇怪,我看不出有什么问题,但显然是有问题的。发生的事情是,当我单击“播放”并按原样保留多维数据集时,NavMesh确实会找到最接近的多维数据集的路径并开始向其移动(cube3),但是当它几乎到达时,NavMesh很难转向并开始向立方体1前进,立方体1显然不是更接近的立方体。

c# - 使用NavMesh查找更接近的播放器-LMLPHP

这是我的代码。 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);
}

最佳答案

您在CalcPath中确实有问题。我将尝试举一个例子来说明问题所在。说到玩家的距离如下:[5,20,10]。显然,玩家A最接近,但是CalcPath将返回玩家C。我将通过您的循环来说明原因:

第一次迭代:
currentPathLength : 0 -> 5
closestTarget : null -> PlayerA.transform.position
lastPathLength : Mathf.Infinity -> 5

第二次迭代:
currentPathLength : 5 -> 20
closestTarget : PlayerA.transform.position -> PlayerA.transform.position(不变)
lastPathLength : 5 -> 20

第三次迭代:(这是您的问题所在)
currentPathLength : 20 -> 10(小于lastPathLength
closestTarget : PlayerA.transform.position -> PlayerC.transform.position
lastPathLength : 20 -> 10

若要解决此问题,请存储最小路径长度,而不是存储lastPathLength,仅在有新的最小长度时才更改closestTarget

关于c# - 使用NavMesh查找更接近的播放器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40710763/

10-10 15:27