自学内容网 自学内容网

unity3d————Resources卸载资源

目录

知识点一:Resources重复加载资源是否会浪费内存?

知识点二:如何手动释放掉缓存中的资源?

实现代码


知识点一:Resources重复加载资源是否会浪费内存?
  • 资源缓存机制
    • 使用Resources加载资源时,资源首次加载后会存储在内存中作为缓存。
    • 后续加载相同资源时,将直接从缓存中取出,避免重复加载,因此不会增加内存占用。
    • 但每次加载都会进行查找操作,存在性能消耗
知识点二:如何手动释放掉缓存中的资源?
  • 卸载指定资源
    • 使用Resources.UnloadAsset(Object assetToUnload)方法卸载特定资源。
    • 注意此方法不能用于GameObject对象,因为GameObject通常用于实例化。
    • 示例代码(错误用法):
      // GameObject obj = Resources.Load<GameObject>("Cube");
      // Resources.UnloadAsset(obj); // 不允许卸载GameObject
  • 卸载未使用的资源
    • 使用Resources.UnloadUnusedAssets()方法卸载所有未使用的资源。
    • 配合垃圾回收GC.Collect()使用,通常在场景切换时执行。
    • 示例代码:
      Resources.UnloadUnusedAssets();
      GC.Collect();
实现代码

以下代码展示了如何在Unity中加载与卸载资源:

using UnityEngine;

public class ResourceManagement : MonoBehaviour
{
    private Texture tex;

    // Start is called before the first frame update
    void Start()
    {
        // 初始化操作(如需要)
    }

    // Update is called once per frame
    void Update()
    {
        // 按下键盘1键加载资源
        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
            print("加载资源");
            tex = Resources.Load<Texture>("Tex/TestJPG");
        }

        // 按下键盘2键卸载资源
        if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            print("卸载资源");
            if (tex != null)
            {
                Resources.UnloadAsset(tex);
                tex = null; // 清空引用,避免悬挂指针
            }
        }
    }
}

 


原文地址:https://blog.csdn.net/2401_82978699/article/details/143815655

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!