В настоящее время я работаю над игрой Unity3D, и у меня возникли проблемы с агентами навигационной сети. Моя текущая цель - заставить врагов идти к ближайшему игроку (будет 3). Один я создаю врага, который проверяет, кто из ближайших игроков. Это делается с оставшимся расстоянием по отношению к игроку, как показано в коде нижеUnity - NavMeshAgent не работает с несколькими углами
agent.CalculatePath(player.transform.position, path);
agent.Stop();
agent.SetPath(path);
if (distance > agent.remainingDistance)
{
distance = agent.remainingDistance;
playerToFollow = player;
}
В этом фрагменте расстояние будет начинаться «float.MaxValue
» и (всякий раз, когда игрок находится ближе, чем текущее расстояние быть установлено как " . playerToFollow
», который является GameObject
проблема заключается здесь:. Когда путь к плееру имеет 0 или 1 углы агент нав сетки начнет ходить свой путь к игроку, НО ... когда путь содержит больше. чем 1 угол, расстояние не будет рассчитываться, таким образом, возвращается agent.remainingDistance == float.PositiveInfinity
.
это означает, что расстояние (это float.MaxValue
) меньше, чем оставшееся расстояние (float.PositiveInfity
).
Любые вещи, которые я мог бы забыть? Пожалуйста, дайте мне знать. Я всегда могу предоставить более подробную информацию.
'NavMeshAgent.remainingDistance' вернет бесконечность, когда расстояние неизвестно. Вы уверены, что и агент, и игрок всегда находятся на navmesh? – Serlite
Да. Часть моей команды, которая осуществляет контроль над игроками, все еще работает над этим. Объекты, помеченные как игроки, не перемещаются и всегда забиваются. Враги я могу разместить икру на самолете, и оба врага, которые могут ходить, и которые не могут находиться в одной позиции Y. – Marcel
На стороне примечания, возможно, что 'оставшееся сопротивление 'не обновляется до тех пор, пока кадр после назначения пути не будет назначен - попробуйте проверить его в методе' Update() 'после того, как путь назначен (если эта проверка в настоящее время выполняется один раз) и посмотреть, изменится ли его значение на что-то более полезное. В противном случае вы можете придерживаться существующего решения, если оно работает приемлемо. – Serlite