2017-08-30 1 views
0

Ich habe an einem Spiel mit Unity, C# und Visual Studio gearbeitet.Methode kehrt früh und unerwartet zurück

Es gibt eine Methode, die korrekt funktioniert hat und aus einem unbekannten Grund nicht mehr funktioniert. Bei der Verwendung von Visual Studio Code Stepping habe ich herausgefunden, dass die Methode sofort zurückkehrt, nachdem sie den if-Codeblock beendet hat.

Das bedeutet, dass die Linien

equippedItem = null; 
slotIsEquipped = false; 

nicht mehr ausgeführt werden sollen.

public void Unequip() 
{ 
    if (equippedItem != null) 
    { 
     equippedItem.transform.parent = null; 
     equippedItem.GetComponent<Animator>().applyRootMotion = true; 
     equippedItem.GetComponent<Animator>().enabled = false; 
     equippedItem.transform.position = new Vector3(0, -256, 0); 
     equippedItem.GetComponent<Weapon>().holder = null; // 
    } 
    equippedItem = null; 
    slotIsEquipped = false; 
} 

Wie auf der Erde ist das möglich?

+0

Laufen Sie im Freigabemodus? – Steve

+0

Nein, die Einstellungen sind Debug/Any CPU. –

+3

Wenn Sie etwas direkt nach 'equipedItem.GetComponent () .holder = null;' setzen, wird es ausgeführt? – IllidanS4

Antwort

0

Der Grund für die Verfahren früh war, weil in der letzten Zeile des wenn Codeblockes die Methode GetComponent() zurückkehren null, etwas zurückkehren, die nicht durch Visual Studio zu sehen war, aber nur durch Unity3D. Die Methode wurde still ohne Fehler Fehler in Visual Studio erscheinen oder App Absturz, wie es mit Standardprogrammen wie WinForms üblich ist, also hatte ich keine Ahnung GetComponent() versagt, bis IllidanS4 zeigte mich, wenn irgendetwas anderes zu überprüfen Wird ausgeführt, wenn es direkt unter der fehlerhaften Zeile platziert wird. Sobald ich wusste, in welcher Zeile das Problem lag, war es einfach, den Grund herauszufinden und das Problem zu beheben.

+0

Haben Sie versucht, try-catch-Block hinzuzufügen? –

+0

Nicht wirklich. Gute Frage. Aus irgendeinem Grund, obwohl ich fast meinen ganzen Code in try-catch-Blöcke gesetzt habe, als ich an Winforms gearbeitet habe, habe ich sie nie in meiner Arbeit mit Unity3D verwendet. Ich habe sie vergessen. Ich denke, dass ich mich daran gewöhnt habe, dass ich mich zu sehr auf den Debugger von Unity gewöhnt habe. –

+1

Ausnahmebehandlung ist eine gute Möglichkeit, Ihren Fehler zu protokollieren und Fehlermeldung genauer zu untersuchen –