2017-12-22 5 views
0

ich eine Klasse für Bewegung ein Spiel Objekt wie folgt aussehen:entfernen NavMesh Komponente nach dem Verschieben

public class Navmesh_move : MonoBehaviour { 
    private NavMeshAgent _thismove; 
    Transform test; 
    //Vector3 destenation_Pos; 
    Vector3 destenation_Position,vector3test; 
    // Use this for initialization 
    public void move(float x,float y,float z) 
    { 

     //this.transform.Rotate (0, 0, 180); 

     _thismove =this.gameObject.GetComponent<NavMeshAgent>(); 
     destenation_Position = new Vector3(x,y,z); 
     _thismove.SetDestination(destenation_Position); 
     NavMeshAgent tempnavmesh = new NavMeshAgent(); 
     tempnavmesh =this.gameObject.GetComponent<NavMeshAgent>(); 
     tempnavmesh.enabled = false; 
     //this.transform.position=destenation_Position; 

    } 

}

Dann schrieb ich dieses Spiel zu einem Objekt.

aber vorher hinzufügen tempnavmesh.enabled = false; mein Spielobjekt move correct.but nach dem Hinzufügen dieser Zeile bekomme ich "SetDestination" can only be called on an active agent that has been placed on a NavMesh. Fehler und mein Spielobjekt doesn/t zu bewegen.

wie entfernen Komponente nach dem Verschieben eines Spielobjekts ???

+0

Anstatt zu entfernen könnten Sie aufhören, die Methode move aufzurufen. - Sind Sie sicher, dass Sie das Objekt nur ein einziges Mal verschieben möchten? Wenn das wirklich das ist, was du tun willst - benutze Destroy (this); –

+0

@TobiasTheel ..... hi mein lieber Freund .... nein in der Laufzeit Zu einer unbekannten Nummer muss ich NavmeshAgent-Komponente zu verschiedenen Objekten hinzufügen und entfernen Sie seine Komponente nach dem Umzug ......... Es ist nicht Klar, wie oft diese Attribute diesen Objekten zuzuschreiben sind ........ das ist sehr Dynamisch –

+0

Ich schätze, das ist nicht der beste Ansatz. Das kontinuierliche Zuweisen (Hinzufügen) und Löschen (Entfernen) wird sich auf Ihre Leistung auswirken. Sie sollten wirklich an eine Lösung denken, bei der Sie die Komponenten wiederverwenden, anstatt sie anschließend zu entfernen und hinzuzufügen –

Antwort

0

Ich habe eine Lösung für mein Problem gefunden. sieht so aus:

public void move(float x,float y,float z) 
{ 

    //this.transform.Rotate (0, 0, 180); 

    _thismove =this.gameObject.GetComponent<NavMeshAgent>(); 
    destenation_Position = new Vector3(x,y,z); 
    _thismove.SetDestination(destenation_Position); 
    Invoke ("disablenavmeshagent", 2);  
} 

//------------------------------------- 
void disablenavmeshagent() 
{ 
    NavMeshAgent tempnavmesh = new NavMeshAgent(); 
    tempnavmesh =this.gameObject.GetComponent<NavMeshAgent>(); 
    tempnavmesh.enabled = false; 
} 
Verwandte Themen