Unity3D - NGUI - 如何卸载加载了预制件的纹理?

时间:2013-06-28 20:39:28

标签: memory unity3d textures 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);
        }
    }

这是我能看到的,因为在卸载后,在Texturer中不再显示Texture2Ds。但问题是,当我再次实例化弹出窗口时,精灵会显示为白色框。因此,它们在需要时不会重新加载,如文档中所述:如果场景中的游戏对象有任何引用,并且正在使用它,那么Unity将在访问后立即从磁盘重新加载资源。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

看起来你正试图过度复杂化这个并且你正在从内存中完全卸载资源。您应该简单地销毁要从场景中删除的父GameObject。

Destroy(GameObject);

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

Unity垃圾收集器将删除对场景的所有引用并自动卸载未使用的资源。