【Assetbundle創建與加載】
Unity有兩種動態加載機制:一種是Resource.Load。一種是AssetBundle。Assetbundle是Unity Pro提供的功能,它可以把多個游戲對象或者資源二進制文件封裝到Assetbundle中。供加載、解壓使用。
【創建Assetbundle】
使用方法 BuildPipeline.BuildAssetBundle (Object, assets , pathName , options , targetPlatform)
參數1:它只能放一個對象。
參數2:可以放入一個數組對象。
參數3:保存路徑。
參數4:BuilderAssetBundleOptions
CollectDependencies // 包含所有依賴關系。
CompleteAssets//強制包含整個資源
DisableWriteTypeTree//在資源包不包含類型信息。
DeterministicAssetBundle//編譯資源包使用一個哈希表儲存對象ID在資源包中。
UncompressedAssetBundle//不壓縮Assetbundle,默認會進行壓縮
參數5:平台
特別注意的是,電腦上和手機上打出來的Assetbundle不能混用,不同平台只能用自己的。
【載入Assetbundle】
使用方法:
1)WWW bundle = new WWW(path);
2)WWW bundle = WWW.LoadFromCacheOrDownload(path, fileVer);
載入成功后就可以通過資源名使用bundle.assetBundle.Load方法獲取資源。
如下圖所示
使用Assetbundle.Load會從Assetbundle的內存鏡像中讀取並創建一個Asset對象,創建的同時會分配相應的內存用於反序列化存儲。
【內存釋放】
最后在使用Assetbundle時候最好的方式是。
創建時:使用Assetbundle.load加載所需的asset,加載完后立即Assetbundle.Unload(false),釋放Assetbundle文件本身的內存鏡像,但不銷毀加載的Asset對象。這樣遍可以釋放一部分內存。
釋放時。如果是通過Instantiate的對象,用Destroy進行銷毀。在合適的地方使用Resources.UnloadUnusedAssets,釋放已經沒有引用的Asset。Unity底層會對對象引用進行計數,如果引用為0.執行UnloadUnusedAssets就可以全部釋放。
【使用要點】
1、AssetBundle會使用Lzma壓縮。
2、Resource下的資源發布時會變成resources.assets文件,2G磁盤大小限制。首次完全下載,不可更新。
3、AssetBundle的本地磁盤緩存可多達4G,除了Web版只能50M。
4、兼容性。
5、AssetBundle創建方法:
6、BundleOption的區別。
7、AssetBundle.CreateFromMemory()速度慢。
8、AssetBundle.CreateFromFile只能加載非壓縮的AssetBundle。
9、LoadLevel方法詳解:
10、AssetBundle的釋放。