打包思路:確定要打包資源的路徑、和打包的輸出路徑(一般為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壓縮過程[+如果緩存則從磁盤中讀取的過程] |