0
点赞
收藏
分享

微信扫一扫

C#从入门到放弃

GG_lyf 2024-11-19 阅读 20

目录

知识点一: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; // 清空引用,避免悬挂指针
}
}
}
}

 

举报

相关推荐

0 条评论