当我不再需要预制件(弹出窗口)时,我正在使用它来卸载纹理:
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);
}
}
这是我能看到的,因为在卸载后,在Texturer中不再显示Texture2Ds。但问题是,当我再次实例化弹出窗口时,精灵会显示为白色框。因此,它们在需要时不会重新加载,如文档中所述:如果场景中的游戏对象有任何引用,并且正在使用它,那么Unity将在访问后立即从磁盘重新加载资源。
我做错了什么?
答案 0 :(得分:1)
看起来你正试图过度复杂化这个并且你正在从内存中完全卸载资源。您应该简单地销毁要从场景中删除的父GameObject。
Destroy(GameObject);
http://docs.unity3d.com/ScriptReference/Object.Destroy.html
Unity垃圾收集器将删除对场景的所有引用并自动卸载未使用的资源。