Unity WebGL AssetBundle
2020-12-13 本文已影响0人
Lif68
这里用了PMXiang写的编辑器扩展脚本,该脚本需要放在Unity-Assets-Editor文件夹下
核心的命令是
//需要打包的资源
AssetBundleBuild[] buildMap = new AssetBundleBuild[1];
//资源包的名称(自定义assetBundleName后缀)
buildMap[0].assetBundleName = fileList[0].Split('/')[fileList[0].Split('/').Length - 2].ToLower()+".pak";
//资源包下的资源名称,一个资源包可以包含多个资源,资源由asset开始的路径组成且包含自身后缀名
buildMap[0].assetNames = fileList.ToArray();
BuildPipeline.BuildAssetBundles(_assetBundleOutputPath,buildMap,BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget);
注意,BuildAssetBundleOptions.ChunkBasedCompression是在打包unityWebGL的ab包能够使用的标识。实际上这个参数是ab包压缩参数,意思是使用LZ4格式进行压缩,这种压缩模式解压快,适合webgl使用。
unity官网文档对这部分参数的介绍
关于压缩模式:
(1)LZMA:默认压缩格式,压缩比大,省空间,使用前需要解压整个压缩包;
(2)LZ4:5.3版本新增, 40%–60% 的压缩率,开启BuildAssetBundleOptions.ChunkBasedCompression打包参数即可。LZ4算法是“基于块”的,因此当对象从一个LZ4压缩包加载时,仅用于该对象的相应块会被解压,不需要解压整个包。所以LZ4和不压缩资源一样,都可以不解压,而直接读取包中的资源的。
(3)UnCompress:不压缩,访问最快,费空间。
关于ab包加载方式:
过去会使用WWW作为加载方式,现在基本使用UnityWebRequest,
UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(path);
这里的path是
Path.Combine(Application.streamingAssetsPath, bundleName)
出来的,bundleName是打出来的ab包的名字,要加后缀名