Unity - NavMeshAgent 不适用于多个角
Unity - NavMeshAgent not working with multiple corners
我目前正在开发 Unity3D 游戏,我 运行 遇到了导航网格代理的一些问题。我目前的 objective 是让敌人走向最近的玩家(会有 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 个角时。导航网格代理将开始走向玩家。但是...只要路径包含超过 1 个角,就不会计算距离,因此返回 agent.remainingDistance == float.PositiveInfinity
。
这意味着距离(float.MaxValue
)小于剩余距离(float.PositiveInfity
)。
有什么我可能会忘记的吗?请告诉我。我总是可以提供更多细节。
我通过不使用代理中的距离来修复它。我现在正在使用路径拐角并计算它们之间的距离。
players.ForEach(
player =>
{
agent.CalculatePath(player.transform.position, path);
float pathDistance = calculatePathDistance(path);
if (pathDistance < distance)
{
distance = pathDistance;
playerToFollow = player;
}
}
);
#calculatePathDistance(NavMeshPath 路径)的实现如下:
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 的工作方式,请告诉我。
我目前正在开发 Unity3D 游戏,我 运行 遇到了导航网格代理的一些问题。我目前的 objective 是让敌人走向最近的玩家(会有 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 个角时。导航网格代理将开始走向玩家。但是...只要路径包含超过 1 个角,就不会计算距离,因此返回 agent.remainingDistance == float.PositiveInfinity
。
这意味着距离(float.MaxValue
)小于剩余距离(float.PositiveInfity
)。
有什么我可能会忘记的吗?请告诉我。我总是可以提供更多细节。
我通过不使用代理中的距离来修复它。我现在正在使用路径拐角并计算它们之间的距离。
players.ForEach(
player =>
{
agent.CalculatePath(player.transform.position, path);
float pathDistance = calculatePathDistance(path);
if (pathDistance < distance)
{
distance = pathDistance;
playerToFollow = player;
}
}
);
#calculatePathDistance(NavMeshPath 路径)的实现如下:
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 的工作方式,请告诉我。