Unity进阶-AssetBundle
AssetBundle介绍
1.AB包说明:特定的平台资产压缩包,有点类似压缩文件,资源有模型、贴图、预制物、音效、材质球;
2.相对于Resources的优点:
- 资源压缩,直接打包后包体更小;
- 可以进行资源热更新,游戏资源先下包再更新;
AssetBundle资源打包
1.标签说明
- 在Inspector窗口下将要打包的资源选择或命名一个标签;
2.API打包:BuildPipeline.BuildAssetBundles() 方法三个参数
- Bundle输出路径:打包路径;
- BuildAssetBundleOptions:不压缩、LZMA压缩、LZ4压缩(如下打包工具详细介绍);
- BuildTarget:打包平台;
3.官方打包工具:AssetBundleBrowser打包关键参数说明;
BuildTarget:目标平台
Output Path:目标输出路径
Clear Folders:是否清空文件夹 重新打包
Copy To StreamingAssets:是否拷贝到StreamingAssets
Compression
NoCompression:不压缩,解压快,包较大 不推荐
LZMA:压缩最小,解压慢(缺点:用一个资源,要解压所有)
LZ4:压缩,相对LZMA大一点点(建议使用,用什么解压什么,内存占用低)
ETI:在资源包中 不包含资源的类型信息
FR:重新打包时需要重新构建包(和ClearFolders不同,它不会删除不再存在的包)
ITTC:增量构建检查时,忽略类型数的更改
Append Hash:将文件哈希值附加到资源包名上
SM:严格模式,如果打包时报错了,则打包直接失败无法成功
DRB:运行时构建
4.打包后文件说明:打包出来的文件有AB资源文件和
- AB包文件:资源文件;
- manifest配置文件:当加载时,提供了对应包的关键信息、资源信息,依赖关系,版本信息等等;
- 关键AB包(和目录名一样的包):是主包且存储了AB包的依赖关系;
使用AB包资源文件
1.加载包的方法
//1.从内存加载资源
//数据是使用LZMA的压缩格式,那么在加载的时候会进行解压的操作
//LZ4格式的数据则会保持其压缩的状态
//第一个参数是字节数组
AssetBundle.LoadFromMemoryAsync()
//2.从本地加载资源
//在加载非压缩文件或者LZ4压缩类型文件的时候,该接口效率极高
//对于LZMA压缩格式的文件,也会在加载的时候执行解压的操作
//参数一是路径
AssetBundle.LoadFromFile()
//3.从网络下载资源
//参数是路径
//首先进行创建并且发送消息
UnityWebRequest request = UnityWebRequest.GetAssetBundle()
//然后进行调用获取资源
DownloadHandlerAssetBundle.GetContent(request);
2.加载包中资源
//1.同步加载,支持泛形
//参数一是资源名,参数二是类型(因为Lua没有泛形)
ab.LoadAsset<T>()
//2.异步加载,基本同上,但是需要配合协程使用
AssetBundleRequest abq = ab.LoadAssetAsync<T>()
3.加载依赖包
//AB包的依赖说明
//多个资源用到别的未打包的资源,那么多个资源都会同时把该引用资源打包到自己包中(浪费内存)
//一个资源用到别的包的资源,必须加载别的包的资源才可以,否则资源丢失(节省内存,但是需要合理管理,所以这里需要用到主包)
//1.加载主包
AssetBundle abMain = AssetBundle.LoasFromFile(路径)
//2.加载主包中的固定文件
AssetBundleManifest abManifest = abMain.LoadAsset<AssetBundleManifest>(主包名)
//3.从固定文件中得到参数包依赖包名
String[] str = abManifest.GetAllDependencies(包名)
4.卸载资源
//1.卸载全部资源包
//第一个参数可以控制是否把加载资源也卸载
//填false其实就是切断连接,下次再加载资源包,会重新加载一个新的
AssetBundle.UnloadAllAssetBundles()
//2.卸载当个资源包,参数同上
ab.Unload()
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 雪夜の自我救赎!
评论
ValineDisqus