20.Resources资源动态加载-Resources卸载资源
20.1 知识点
Resources重复加载资源会浪费内存吗?
- 其实Resources加载一次资源过后
- 该资源就一直存放在内存中作为缓存
- 第二次加载时发现缓存中存在该资源
- 会直接取出来进行使用
- 所以,多次重复加载不会浪费内存
- 但是会浪费性能(每次加载都会去查找取出,始终伴随一些性能消耗)
手动释放掉缓存中的资源
Resources中的UnloadAsset方法 卸载指定资源
//从内存中卸载 / assetToUnload /
//注意:
//该方法 不能释放 GameObject对象 因为它会用于实例化对象
//它只能用于一些 不需要实例化的内容 比如 图片 和 音效 文本等等
//一般情况下 我们很少单独使用它
//GameObject obj = Resources.CoroutineAsynLoad<GameObject>("Cube")
//即使是没有实例化的 GameObject对象也不能进行卸载
//Resources.UnloadAsset(obj);//报错 不能卸载GameObject
Resources中的UnloadUnusedAssets方法 卸载未使用的资源
//卸载未使用的资源。
//注意:一般在过场景时和GC一起使用
Resources.UnloadUnusedAssets();
GC.Collect();
打开调试窗口,按下按键,可以查看加载图片和卸载图片内存的变化,重复按下加载,内存还是不会变化
void Update()
{
//加载卸载不是GameObject可以正常使用
//按键加载卸载指定资源,查看变化
if (Input.GetKeyDown(KeyCode.Alpha1))
{
print("加载资源");
tex = Resources.Load<Texture>("Tex/TestJPG");
}
if (Input.GetKeyDown(KeyCode.Alpha2))
{
print("卸载资源");
Resources.UnloadAsset(tex);
tex = null;
}
}
总结
- Resources.UnloadAsset 卸载指定资源,但是不能卸载GameObject对象
- Resources.UnloadUnusedAssets 卸载未使用资源,一般过场景时配合GC使用
20.2 知识点代码
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson20_Resources资源动态加载_Resources卸载资源 : MonoBehaviour
{
private Texture tex;
void Start()
{
#region 知识点一 Resources重复加载资源会浪费内存吗?
//其实Resources加载一次资源过后
//该资源就一直存放在内存中作为缓存
//第二次加载时发现缓存中存在该资源
//会直接取出来进行使用
//所以 多次重复加载不会浪费内存
//但是 会浪费性能(每次加载都会去查找取出,始终伴随一些性能消耗)
#endregion
#region 知识点二 如何手动释放掉缓存中的资源
//Resources中的UnloadAsset方法 卸载指定资源
//从内存中卸载 / assetToUnload /。
//注意:
//该方法 不能释放 GameObject对象 因为它会用于实例化对象
//它只能用于一些 不需要实例化的内容 比如 图片 和 音效 文本等等
//一般情况下 我们很少单独使用它
//GameObject obj = Resources.CoroutineAsynLoad<GameObject>("Cube");
//即使是没有实例化的 GameObject对象也不能进行卸载
//Resources.UnloadAsset(obj);//报错 不能卸载GameObject
//Resources中的UnloadUnusedAssets方法 卸载未使用的资源
//卸载未使用的资源。
//注意:一般在过场景时和GC一起使用
Resources.UnloadUnusedAssets();
GC.Collect();
#endregion
#region 总结
//Resources.UnloadAsset 卸载指定资源 但是不能卸载GameObject对象
//Resources.UnloadUnusedAssets 卸载未使用资源 一般过场景时配合GC使用
#endregion
}
void Update()
{
//加载卸载不是GameObject可以正常使用
//按键加载卸载指定资源,查看变化
if (Input.GetKeyDown(KeyCode.Alpha1))
{
print("加载资源");
tex = Resources.Load<Texture>("Tex/TestJPG");
}
if (Input.GetKeyDown(KeyCode.Alpha2))
{
print("卸载资源");
Resources.UnloadAsset(tex);
tex = null;
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com