http://blog.sina.com.cn/s/blog_80cc3d870101kxzb.htmlhtml
1、如何下載AssetBundle
一、非緩存機制——經過建立一個WWW實例來對AssetBundle文件進行下載。下載後的AssetBundle文件將不會進入Unity引擎特定的緩存區。
二、緩存機制——經過WWW.LoadFromCacheOrDownload接口來下載AssetBundle文件。下載後的AssetBundle文件將自動被存放在Unity引擎特定的緩存區內,該方法是Unity推薦的AssetBundle文件下載方式。(目前,對於發佈到WebPlayer上的網頁遊戲,默認緩存大小爲50MB;對於發佈到PC上的客戶端遊戲和發佈到iOS/Android上的移動遊戲,默認緩存大小爲4CB。
2、如何加載AssetBundle
算法
一、WWW.assetBundle——能夠經過WWW.assetBundle屬性來建立一個AssetBundle文件的內存對象。
二、AssetBundle.CreateFromFile——經過該接口能夠從磁盤文件建立一個AssetBundle文件的內存對象。須要注意的是,該方法僅支持非壓縮格式的AssetBundle,即在建立AssetBundle時必須使用UncompressedAssetBundle選項。
三、AssetBundle.CreateFromMemory——經過該接口能夠從內存數據流建立AssetBundle內存對象。例如,當用戶對AssetBundle進行加密時,能夠先調用解密算法返回解密後的數據流,而後經過AssetBundle.CreateFromMemory從數據流建立AssetBundle對象。
3、如何從AssetBundle中加載Assets
一、AssetBundle.Load。
二、AssetBundle.LoadAsync。
三、AssetBundle.LoadAll。
4、如何從場景AssetBundle中加載Assets
緩存
一、Application.LoadLevel。
二、Application.LoadLevelAsync。
三、Application.LoadLevelAdditive。
四、Application.LoadLevelAdditiveAsync。
ide
5、AssetBundle內存管理
6、如何卸載AssetBundle
一、AssetBundle.Unload接口。
7、如何卸載從AssetBundle中加載的Assets
一、AssetBundle.Unload(true)。
二、Resources.UnloadUnusedAssets()——該接口會卸載掉全部沒有使用的Assets。須要強調的是,它的做用範圍不只是當前的AssetBundle,而是整個系統,並且它也不能卸載掉從當前AssetBundle文件中加載的仍在使用的Assets。
8、如何卸載GameObject
一、對於由CameObject.Instantiate接口實例化出的CameObject,Unity提供了CameObject.Destroy或CameObject.DestroyImmediate接口來將其卸載。Unity推薦使用CameObject.Destroy接口,若是使用該接口,Unity會將真正的刪除操做延後到一個臺適的時機統一進行處理,可是會在渲染以前進行。
9、WWW、AssetBundle及Asset的關係
加密
一、關係圖:
url
二、如圖所示,WWW對象和經過WWW.assetBundle屬性所加載的AssetBundle對象會對Web Stream數據持有引用,同時AssetBundle也會引用到從它所加載的全部Assets。值得一提的是,真正的數據都是存放在Web Stream數據中,如紋理、模型等,而WWW和AssetBundle對象只是一個結構指向了Web Stream數據。
三、對於WWW對象自己,可使用www = null或WWW.Dispose()來進行卸載。兩者的效果同樣,只是www = null不會及時引發內存釋放操做,而是在系統自動垃圾回收時進行釋放;而WWW.Dispose()會及時調用系統的垃圾回收操做來進行內存釋放。WWW對象釋放後,其對於Web Stream數據的引用計數也會相應減1。
四、對於Web Stream數據,其所佔用的內存會在其引用計數爲0時,自動被系統進行釋放。如上圖中,當AssetBundle對象以及WWW對象被釋放後,Web Stream 數據所佔用的內存也會被系統自動回收。
spa