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()