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.加载资源过程中内存占用

http://www.cnblogs.com/U-tansuo/archive/2013/04/02/unity3d_memory_optimization.html

5.切换场景资源清理

由于LoadLevel调用的时候仅把“1.实例化的gameobject 2.prefabs 3.通过AssestBundle.LoadAsset(prefabs)自动加载进来的asset”删除了,而ab包没管,所以需要清理一下ab包以减少内存的占用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章