2013-03-09 192 views
0

我有一個循環從列表中搜索特定的對象,然後我把它存儲在一個全局變量。但是,當我試圖獲取它總是空,遊戲崩潰。統一對象已被銷燬

SpecialItem pickedItem; // (global variable) 

void OnGUI() 
{ 
    for loop (all objects) // Idictionary<SpecialItem, string> 
    { 
     pickedItem = Instantiate(myItem) as SpecialItem; 
     Debug.Log("this->" + pickedItem.name.ToString()); // ERROR 
    } 

} 

團結錯誤是:MissingReferenceException:類型的對象 「SpecialItem」已被破壞,但你仍然試圖訪問 它。

我認爲這是因爲在foreach的,所以我已經通過正常的更換for循環

有人可以解釋我爲什麼出現這種情況?可以做些什麼來解決?我最初的想法是與對象本身一起工作,但似乎我不能,所以我試着做一個副本。

回答

1

這個問題不在我提交給stackoverflow本身的代碼中。

我有一個物理對象,我附加了SpecialItem腳本。當我將它選到目錄時,我使用了Destroy(gameObject)。

由於某種奇怪的原因,我仍然可以訪問它的一些變量,如'Texture','ammount'或'slots'。但是,一旦我嘗試訪問「名稱」,它就會崩潰,因爲對象已經被銷燬。

所以我替換了:

Destroy(gameObject);

for

gameObject.SetActive(false);

錯誤消失了。

1

您確定該對象的類型是SpecialItem嗎?

如果對象不能轉換爲類型,則「as」關鍵字將返回null。

Instantiate(myItem)的簽名是什麼?

+0

我試着在pickItem =後面進行調試,並且我遇到了同樣的問題......使用SpecialItem和(SpecialItem)cast之間有區別嗎?我很確定這個對象是從那個類型開始的,因爲字典本身來自SpecialItem – 2013-03-09 21:10:16

+0

區別在於(SpecialItem)強制轉換會拋出一個Exception,其中「as」只會將該對象賦值爲null。 – Jras 2013-03-09 21:14:57

+0

您是否可以提供「Instantiate(myItem)」 – Jras 2013-03-09 21:17:20