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包以減少內存的佔用