2017-01-25 10 views
2

Моя проблема в том, что всякий раз, когда она пытается двигаться к текущей путевой точке, она сталкивается со странными направлениями и полностью не идет по пути.AI сталкивается с Weird Direction при использовании путевой точки UNITY

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; 
    } 
} 

В настоящее время используется * поиск пути. Полный исходный код можно найти здесь: https://github.com/SebLague/Pathfinding

Когда он достигнет текущей путевой точки, он случайным образом изменяет свое направление или случайным образом сталкивается с направлением и не проходит через следующую путевую точку. (Screenshot)

ответ

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 может возможно промахнуться или не достигают именно целевой вектор и будет перемещаться вокруг и резко менять направление при наведении на целевой вектор.

+0

Я забыл сказать, что он переходит на другую путевую точку, когда нет направления, или позиция статична. но когда я добавил направление туда, где он тоже смотрит, он сталкивается со странным направлением в течение примерно 10 секунд, затем переходит к следующей путевой точке или иногда не переходит к следующей путевой точке, потому что он STUCKED смотрит на эту текущую точку. –

+0

избавиться от 'targetIndex = 0;' – maksymiuk

+0

Я попробовал ваше предложение, но он по-прежнему сталкивается со странным направлением после достижения путевой точки. Хотя я как-то добрался туда, откуда исходит ошибка. Это происходит из анимации и этой строки кода «transform.LookAt (currentWaypoint);». Я попытался удалить анимацию и каким-то образом перейти к следующей путевой точке. Как я могу это исправить? анимация имеет только статический запуск. поэтому он не имеет простоя или что-то еще, только запустить анимацию. –