Unity - NavMeshAgent不使用多个角落

时间:2016-10-25 18:11:03

标签: c# unity3d path-finding navmesh

我目前正在研究Unity3D游戏,我遇到了导航网格代理的一些问题。我目前的目标是让敌人走向最近的玩家(将会有3个)。一个我产生一个敌人,它将检查自己哪个球员最接近。这是通过向玩家的剩余距离完成的,如下面的代码所示

agent.CalculatePath(player.transform.position, path);
agent.Stop();
agent.SetPath(path);

if (distance > agent.remainingDistance)
{
    distance = agent.remainingDistance;
    playerToFollow = player;
} 

在此代码段中,距离将从“float.MaxValue”开始,并且(当玩家比当前距离更近时,设置为“playerToFollow”,这是一个游戏对象。

问题在于: 当玩家的路径有0或1个角时。导航网格代理将开始走向播放器的路径。但是......只要路径包含多个角,就不会计算距离,从而返回agent.remainingDistance == float.PositiveInfinity

这意味着距离(float.MaxValue)小于剩余距离(float.PositiveInfity)。

我可能忘记的任何事情?请告诉我。我总能提供更多细节。

1 个答案:

答案 0 :(得分:0)

我通过不使用代理中的距离来修复它。我现在正在使用路径角并计算它们之间的距离。

 players.ForEach(
        player =>
        {
            agent.CalculatePath(player.transform.position, path);
            float pathDistance = calculatePathDistance(path);

            if (pathDistance < distance)
            {
                distance = pathDistance;
                playerToFollow = player;
            }

        }
    );

执行#calculatePathDistance(NavMeshPath path)如:

private float calculatePathDistance(NavMeshPath path)
{
    float distance = .0f;
    for (var i = 0; i < path.corners.Length -1; i++)
    {
        distance += Vector3.Distance(path.corners[i], path.corners[i + 1]);
    }
    return distance;
}

如果您有使用agent.remainingDistance的方法,请告诉我。