Frage
Kürzlich verwendet
NavMeshAgent
Beim 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
NavMesh
das Pfadfindungsraster wird ebenfalls dynamisch gebacken.
lösen
Allgemeine Lösung
- Überprüfen Sie, ob die Karte gebacken ist. Wenn kein Wegfindungsgitter vorhanden ist, backen Sie die Karte manuell im Fenster
Nagation
.- Überprüfen Sie, ob sich das Monster oder der Protagonist innerhalb
Navmesh
des Wegfindungsgitters befindet.- Versuchen Sie es mit der
NavMesh.SamplePosition()
MethodeGameObject 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:
- Das Monster oder der Protagonist wird dynamisch in der Methode
Start()
generiert. Deaktivieren Sie die KomponenteNav Mesh Agent
am Objekt und fügen Sie den Code im Skript hinzuvoid Start() { GetComponent<NavMeshAgent>().enabled = true; }
- Wenn das Monster und der Protagonist dynamisch in der Methode
Awake()
generiert werden, fügen Sie beim Generieren des Objekts im Skript dynamischNav Mesh Agent
Komponenten hinzu zum Objekt.private NavMeshAgent _agent; void Awake () { _agent= this.gameObject.AddComponent<NavMeshAgent> (); } void Start () { _agent.enabled = true; }