【Unity】«SetDestination можно вызвать только для активного агента, размещенного в NavMesh».

вопрос

Недавно использовалосьNavMeshAgentПроизошла ошибка при запуске проекта функции автоматического поиска пути и атаки монстра"SetDestination can only be called on an active agent that has been placed on a NavMesh". Монстр может бегать и атаковать, но не может двигаться вдогонку за противником.

Предварительные условия

В моем проекте карты и монстры генерируются динамически, и NavMeshсетка поиска пути также динамически запекается.

решать
Общее решение
  1. Проверьте, запечена ли карта. Если сетки поиска пути нет, запекайте карту вручную в окнеNagation.
  2. Проверьте, находится ли монстр или главный герой в пределахNavmesh сетки поиска пути.
  3. Попробуйте использоватьNavMesh.SamplePosition()метод
   GameObject go = new GameObject("Target");
   Vector3 sourcePostion = new Vector3( 100, 20, 100 );//The position you want to place your agent
   NavMeshHit closestHit;
   if( NavMesh.SamplePosition(  sourcePostion, out closestHit, 500, 1 ) ){
     
     
     go.transform.position = closestHit.position;
     go.AddComponent<NavMeshAgent>();
     //TODO
   }
   else{
     
     
     Debug.Log("...");
   }

Если ни одно из вышеперечисленных решений не решит вашу проблему, то ваша ситуация такая же, как и моя, и решение очень простое:

  1. Монстр или главный герой динамически генерируется в методе Start(). Снимите флажок с компонента Nav Mesh Agent на объекте и добавьте код в скрипт
void Start()
 {
     
     
       GetComponent<NavMeshAgent>().enabled = true;
   }
  1. Если монстр и главный герой динамически генерируются в методе Awake(), при создании объекта в скрипте динамически добавляйте Nav Mesh Agent компоненты к объекту.
private NavMeshAgent _agent;
void Awake () {
     
     
   _agent= this.gameObject.AddComponent<NavMeshAgent> ();
}
void Start () {
     
     
   _agent.enabled = true;
}

Guess you like

Origin blog.csdn.net/weixin_42186644/article/details/111693969