2014-01-07 80 views
0

我已經在我的項目中加載了資產包,我將它們全部添加到列表中,以便可以遍歷資產包內的每個單獨對象。但是,當我在場景中不再需要時刪除加載的對象時遇到問題。銷燬Unity資產包中的加載資產

在我的研究中,我知道Bundle.UnloadAll,但是從我讀過的東西中可以看出它毀壞了我不想要的整個包。現在我的代碼如下所示:

if(GUI.Button(new Rect(10,130,100,50), "Forward")) 
{ 
    if(index > 0 && object_List[index] != null) 
    { 
     Destroy((GameObject)object_List[index]); 
    } 

    Instantiate((GameObject)object_List[index]); 
    index ++; 
} 

通過我的列表此代碼遍歷包含裝入資產包的對象,並應在產卵列表中的下一個。同時,它應該銷燬先前加載的一個。但是,當我運行這段代碼,我得到以下錯誤:

Destroying assets is not permitted to avoid data loss. If you really want to remove an asset use DestroyImmediate (theObject, true);

所以,我改變我的代碼,它的建議,我碰到這個錯誤:

MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object.

然而,沒有東西從我的名單中刪除而第一個產生的對象仍然存在。

有沒有人遇到類似的問題?我試圖做甚至可能嗎?

任何幫助,將不勝感激。

回答

0

你所犯的錯誤是你試圖摧毀資產,而不是遊戲gameObject。當你調用Instantiate((GameObject)object_List[index]);它返回到加載的對象的引用,因此,例如:

GameObject myObject = Instantiate((GameObject)object_List[index]);

會給你的對象,以後你要打電話Destroy(myObject);摧毀它。你可以嘗試在需要時禁用/啓用遊戲對象(儘管目前還不清楚你爲什麼要銷燬它們,所以這可能無法滿足你的需要)而不是破壞它們。

if(GUI.Button(new Rect(10,130,100,50), "Forward")) 
{ 
    if(index > 0 && object_List[index] != null) 
    { 
     ((GameObject)object_List[index]).SetActive(false); 
    } 

    ((GameObject)object_List[index]).SetActive(true); 
    index ++; 
}