„Unity“ „SetDestination kann nur auf einem aktiven Agenten aufgerufen werden, der auf einem NavMesh platziert wurde“, heißt es hier

Frage

Kürzlich verwendetNavMeshAgentBeim Ausführen des Monster-Projekts zur automatischen Pfadfindung und Angriffsfunktion ist ein Fehler aufgetreten"SetDestination can only be called on an active agent that has been placed on a NavMesh". Das Monster kann rennen und angreifen, aber nicht sich bewegen, um den Feind zu verfolgen.

Voraussetzungen

In meinem Projekt werden die Karten und Monster dynamisch generiert, und NavMeshdas Pfadfindungsraster wird ebenfalls dynamisch gebacken.

lösen
Allgemeine Lösung
  1. Überprüfen Sie, ob die Karte gebacken ist. Wenn kein Wegfindungsgitter vorhanden ist, backen Sie die Karte manuell im FensterNagation.
  2. Überprüfen Sie, ob sich das Monster oder der Protagonist innerhalbNavmesh des Wegfindungsgitters befindet.
  3. Versuchen Sie es mit derNavMesh.SamplePosition()Methode
   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("...");
   }

Wenn keine der oben genannten Lösungen Ihr Problem löst, dann ist Ihre Situation dieselbe wie meine und die Lösung ist ganz einfach:

  1. Das Monster oder der Protagonist wird dynamisch in der Methode Start() generiert. Deaktivieren Sie die Komponente Nav Mesh Agent am Objekt und fügen Sie den Code im Skript hinzu
void Start()
 {
     
     
       GetComponent<NavMeshAgent>().enabled = true;
   }
  1. Wenn das Monster und der Protagonist dynamisch in der Methode Awake() generiert werden, fügen Sie beim Generieren des Objekts im Skript dynamisch Nav Mesh Agent Komponenten hinzu zum Objekt.
private NavMeshAgent _agent;
void Awake () {
     
     
   _agent= this.gameObject.AddComponent<NavMeshAgent> ();
}
void Start () {
     
     
   _agent.enabled = true;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_42186644/article/details/111693969
Recomendado
Clasificación