2013-06-28 39 views
3

我使用這個卸載紋理時我不再需要的預製(是一個彈出):Unity3D - NGUI - 如何卸載加載預製件的紋理?

UISprite[] widgets = gameObject.GetComponentsInChildren<UISprite>(true); 

    for (int i = 0, imax = widgets.Length; i < imax; i++) 
    { 
     UISprite w = widgets[i]; 

     Debug.Log ("Removing: " + w.gameObject.name); 
     if (w.mainTexture) 
     { 
      Debug.Log ("Removing: " + w.mainTexture.name); 
      Resources.UnloadAsset(w.mainTexture); 
     } 
    } 

這是工作,我可以看到,因爲Texture2Ds未顯示在剖析了後卸載。但問題是,當我再次實例化彈出窗口時,精靈顯示爲白色框。因此,在文檔中說明時,它們不會在需要時重新加載:如果場景中的遊戲對象有任何引用,並且正在使用該資源,那麼只要Unity被訪問,Unity就會從磁盤重新加載資產。

我做錯了什麼?

回答

1

看起來好像你試圖將這一點過分複雜化,並且你完全從內存中卸載資源。你應該簡單地銷燬你想從場景中移除的父GameObject。

Destroy(GameObject); 

http://docs.unity3d.com/ScriptReference/Object.Destroy.html

統一垃圾收集將刪除到現場的所有引用,並自動卸載未使用的資源。

+0

它有幫助嗎?如果是,請隨時通過點擊左側的勾號來接受答案 –