Unity3D - NGUI - 如何卸载与预制件加载一起加载的纹理?

4

我使用这个方法在不再需要Prefab(弹出窗口)时卸载贴图:

    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将在访问该资产时从磁盘重新加载该资产。

我做错了什么?

1个回答

1

看起来你有点过于复杂化了,而且你正在完全卸载内存中的资源。你应该简单地销毁想要从场景中移除的父GameObject。

Destroy(GameObject);

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

Unity的垃圾回收器会自动删除所有与场景和未使用资源相关的引用。


它有帮助吗?如果有,请随意点击左侧的勾选接受答案。 - Greg Lukosek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接