AssetBundle打包-----BuildPipeline的應用


  打包思路:確定要打包資源的路徑、和打包的輸出路徑(一般為S路徑),把存放資源的路徑使用遞歸進行遍歷,獲取所有資源,文件類型的資源可以通過File拷貝或IO寫到輸出路徑,其他資源的打包通過AssetBundle方式打包,即確定AB包和AB包內的資源,使用BuildPieline.BuildAssetBundle進行打包。

  BuildPipeline.BuildAssetBundles()兩個重載,三個參數: BuildPipeline.BuildAssetBundles(bundle的輸出路徑,   BuildAssetBundleOptions<壓縮格式>,BuildTarget當前資源需要被使用的平台的分類);四個參數:BuildPipeline.BuildAssetBundles(bundle的輸出路徑,AssetBundleBuild對象的集合(AssetBundleBuild對象,存儲了AB包名和資源路徑數組),   BuildAssetBundleOptions<壓縮格式>,BuildTarget當前資源需要被使用的平台的分類)。

  打包路徑:

  一般以Appcation.Datapath(Assets目錄)下的StreamingAssets為輸出路徑。

  壓縮方式:

  1)BuildAssetBundleOptions.None:使用LZMA算法壓縮,壓縮的包更小,但是加載時間更長,需要解壓全部。

  2)BuildAssetBundleOptions.UncompressedAssetBundle:不壓縮,包大,加載快
  3)BuildAssetBundleOptions.ChunkBasedCompression:使用LZ4壓縮,壓縮率沒有LZMA高,但是我們可以加載指定資源而不用解壓全部。
  注意:使用LZ4壓縮,可以獲得可以跟不壓縮相媲美的加載速度,而且比不壓縮文件要小。

  BuildTarget當前資源需要被使用的平台的分類:PC端,移動端(安卓,ios)。

  以下這張表是當使用不同的壓縮方式和不同的加載方法時,內存和性能的開銷情況比較:     
   不壓縮  LZ4壓縮 LZMA壓縮 
 WWW加載 內存:未壓縮資源包的大小(+當WWW未被Disposed時未壓縮資源包的大小)
性能:沒有額外的處理過程
 內存:LZ4高壓縮包的大小(+當WWW未被Disposed時LZ4高壓縮包的大小)
性能:沒有額外的處理過程
內存:LZ4壓縮包的大小(+當WWW未被Disposed時LZMA壓縮包的大小)
性能:當下載的時候,LZMA解壓過程+LZ4壓縮過程
 LoadFromCacheOrDownload加載 內存:沒有額外內存占用
性能:從磁盤讀取的過程
內存: 沒有額外內存占用
性能:從磁盤讀取的過程
內存:沒有額外內存占用
性能:從磁盤讀取的過程
LoadFromMemory (異步)加載  內存:未壓縮的資源包大小
性能:沒有額外的處理過程
內存:LZ4高壓縮資源包的大小
性能:沒有額外的處理過程
內存:沒有額外內存占用
性能:從磁盤讀取的過程
LoadFromFile(異步)加載 內存:沒有額外內存占用
性能:從磁盤讀取的過程
內存:沒有額外內存占用
性能:從磁盤讀取的過程
內存:LZ4壓縮包的大小
性能:從磁盤讀取+LZMA解壓+LZ4壓縮 的過程
WebRequest (也需要緩存)加載  內存:未壓縮的資源包大小
性能:沒有額外處理過程[+如果緩存則從磁盤中讀取的過程]
 內存:LZ4高壓縮包的大小
性能:沒有額外處理過程[+如果緩存則從磁盤中讀取的過程]
內存:LZ4壓縮包的大小
性能:當下載的時候,LZMA解壓過程+LZ4壓縮過程[+如果緩存則從磁盤中讀取的過程]

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM