2016-11-30 5 views
1

In Unity 5.4/5.5 habe ich ein Problem mit GetComponent, das den CharacterController meines GameObject aus irgendeinem Grund nicht zurückgibt. Nachdem ich Unity neu gestartet habe, funktioniert es wieder.GetComponent gibt null zurück

enter image description here

_MAIN läuft dieses Skript:

private GameObject frog; 
private CharacterController controller; 

void Start() { 
    frog = GameObject.Find ("Frog"); 
    controller = frog.GetComponent<CharacterController>(); 

    Debug.Log(controller); // returns null 
} 

void Update() { 
    if (controller.isGrounded) { 
     // error is thrown 
    } 
} 

Nachdem die controller in Update verwiesen wird, erhalte ich die Fehlermeldung:

MissingComponentException: There is no 'CharacterController' attached to the "Frog" game object,

FYI, frog ist die Gameobject Rückkehr in Ordnung .

+2

Hast du ein anderes GameObject namens 'Frog' in deiner Szene? Schauen Sie genau hin ... Bitte fügen Sie auch den vollständigen Code, wie Sie es verwenden, in die Update-Funktion ein – Programmer

+0

Der Code stoppt bei 'if (controller.isGrounded) {' in Update. – Tom

+0

Sie können die Update-Funktion in Ihre Frage setzen – Programmer

Antwort

3

Anstatt GameObject.Find("Frog") zu verwenden, versuchen Sie es mit GameObject.FindWithTag("Frog") und fügen Sie dem Frog-Objekt das Tag "Frog" hinzu.

Der Grund, dass Sie dies geschehen lassen, ist irgendwo, ein zweites Objekt namens "Frog" wird der Szene hinzugefügt. Wenn dies geschieht, wählt Unity zufällig eines der beiden gefundenen Objekte aus. Dies führt dazu, dass es manchmal funktioniert, aber nicht zu anderen Zeiten.

Durch den Wechsel zu einem Tag machen Sie es wahrscheinlicher, dass das Objekt eindeutig identifiziert wird.

+0

Genau wie ich fragte, ob OP zwei GameObjects namens "Frog" hatte. Das wurde nie beantwortet. – Programmer

+0

@Programmer bedenkt, er antwortete mit 'GameObject.FindWithTag (" Frog ")' das Problem in den Kommentaren zu beheben, wenn ich ihn fragte, dass ich glaube, die implizierte Antwort auf Ihre Frage ist "Ja, ich habe zwei Dinge namens Frosch" –

+0

OP antwortete mit 'if (controller.isGrounded) {' auf dieser Frage, aber ja, das ist die Lösung für das Problem. – Programmer