Resources.UnloadAsset 卸载一张图片Asset

发表于2018-04-12
评论0 4.6k浏览
今天修改个资源管理脚本,发现一张图片卸载掉还能用。
所以,做个简单的例子试试看
将一个贴图Asset卸载掉,用 Resources.UnloadAsset(textureTex001);
完了,再创建一个物体,继续使用该贴图,该贴图还在(编辑器中Unity2017.0f3),这下有点尴尬。

代码如下:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ResourceTest : MonoBehaviour
{
    private Texture2D textureTex001;
    void Start ()
    {
        const string assetPath = "texApiTest/tex001";
        textureTex001 = Resources.Load(assetPath) as Texture2D;
        CreateCube(textureTex001);
        CreateCube(textureTex001);
        PrintTextureNumber();
    }
    void OnGUI()
    {
        if (GUILayout.Button("Resources.UnloadAsset(textureTex001)"))
        {
            Resources.UnloadAsset(textureTex001);
            PrintTextureNumber();
        }
        if (GUILayout.Button("CreateCube"))
        {
            CreateCube(textureTex001);
            PrintTextureNumber();
        }
    }
    private Vector3 _position = new Vector3(-3, 0, 0);
    public void CreateCube(Texture2D textureTex2d)
    {
        _position += new Vector3(1.5f, 0, 0);
        var plane = GameObject.CreatePrimitive(PrimitiveType.Cube);
        plane.transform.position = _position;
        var planeMaterial = new Material(Shader.Find(@"Legacy Shaders/Diffuse"));
        var planeRender = plane.GetComponent<MeshRenderer>();
        planeRender.material = planeMaterial;
        planeMaterial.mainTexture = textureTex2d;
    }
    public void PrintTextureNumber()
    {
        var textures = Resources.FindObjectsOfTypeAll<Texture2D>();
        var numberOfTextures = textures.Length;
        Debug.Log("load numberOfTextures : " + numberOfTextures);
    }
}
问了别人,说是“一般来说释放不是同步的”让我推迟一帧再调用使用那张图。
是这样吗?

这个图就占一份内存,实例化的物体都是保存的该图的引用,如果释放掉这个图的Asset,那么所有用这个图的物体都会丢失这张图。这里描述的是显示的释放已加载的Asset对象。

已经释放了呀,但却还在。

打出版本来调试看看,发现打出版本来的是释放掉的,同一帧再调用也是释放掉的。

结论:(试验的结果,有可能不对)
  1. 不清楚同样的操作为啥编辑器和打出版本的不一样
  2. 肯定是执行UnloadAsset后,再使用那个图,肯定是没有了的
  3. 是不是执行UnloadAsset后,要把贴图textureTex001 = null,才能释放? 不存在的,没有赋值null,也照样释放
来自:https://blog.csdn.net/bigpaolee/article/details/79372797

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签:

0个评论