LuaFramework内存资源管理器ResourceManger详解及切换场景资源清理

1.成员变量
m_BaseDownloadingURL : 获取资源的地方,加载AssetBundle包的时候会用到
m_AssetBundleManifest : 包间依赖关系文件,从这个类中的信息中可以知道某个包依赖的包有哪些,如果依赖的包还没加载进去则先加载依赖包
m_Dependencies : 如上,一个包名对应多个依赖包名
m_LoadedAssetBundles :已经加载入内存的AssetBundle包,一个包名对应一个AssetBundle(AssetBundleInfo包了一层)
m_LoadRequests : 当前正在处理的“从AssetBundle包中解压Asset资源(纹理,材质,预设等)”的请求,一个包名对应多个Asset资源名
 
2.重要调用堆栈
ResourceManager初始化
GameManager.Init->CheckExtractResource->OnUpdateResource->OnResourceInited->ResourceManager.Initiallize
加载AssetBundle包并把指定的Asset资源从包中解压出来,一般都是通过LoadPrefb调用,把预设从包中解压出来,则会同时把预设引用的资源(例如mesh,材质,纹理等)解压出来。一般情况下,在使用某个预设去Initialize出一个克隆体之前,会加载这个预设资源。加载预设资源需要一定时间,所以对于一些较大的资源,也可以在loading的时候全部加载出来,不过这样内存占用就比较大了,即所谓用空间换时间。
ResourceManager.LoadPrefb-》LoadAsset
 
3.主要函数
LoadAsset
OnLoadAssetBundle
OnLoadAsset
 
4.加载资源过程中内存占用
 
5.切换场景资源清理
由于LoadLevel调用的时候仅把“1.实例化的gameobject 2.prefabs 3.通过AssestBundle.LoadAsset(prefabs)自动加载进来的asset”删除了,而ab包没管,所以需要清理一下ab包以减少内存的占用
 
原文地址:https://www.cnblogs.com/VariousCloudShadow/p/7201059.html