2017-08-30 46 views
0

我一直在Unity,C#和Visual Studio的遊戲工作。方法返回較早,意外

有一種方法一直在正常工作,並且因爲一個未知的原因,它已經不存在了。通過使用Visual Studio的代碼步進,我發現該方法在完成if代碼塊後立即返回。

這意味着,該行

equippedItem = null; 
slotIsEquipped = false; 

沒有得到任何更多的執行。

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; 
} 

這怎麼可能?

+0

您是否正在發行模式下運行? – Steve

+0

不可以,設置是Debug/Any CPU。 –

+3

如果你在'equippedItem.GetComponent ().holder = null;'之後直接放了一些東西,它會執行嗎? – IllidanS4

回答

0

的方法進行早期回國是因爲如果代碼塊的最後一行的方法GetComponent()返航,一些無法通過Visual Studio中可以看出,但只有理由通過Unity3D。該方法失敗,沒有任何錯誤出現在Visual Studio中,或應用程序崩潰,因爲它是像WinForms標準程序通常,因此我不知道GetComponent()失敗,直到IllidanS4指出我檢查是否有其他如果放置在失敗線的正下方,則執行。一旦我知道哪條線路出現問題,找到原因並解決問題非常簡單。

+0

你嘗試添加try-catch塊嗎? –

+0

不是。好問題。由於某些原因,儘管我在使用winforms時將幾乎所有的代碼放在try-catch塊中,但我從未在Unity3D上使用它們。我忘了他們。我想這是因爲我習慣了Unity的調試記錄器,所以我完全依賴它。 –

+1

異常處理是記錄錯誤並更詳細地檢查錯誤消息的好方法 –