Unity_AssetBundle
- 引言:主要介绍一下AB包的基本原理和打包过程
初步了解AB包
AB包是什么??
- AB是特定平台的
资产压缩包
,类似于压缩文件
资产包括:
模型、贴图、预制体、音效等等。
注意:
C#代码不能打成AB包
。所以代码要用Lua热更。
AB包有什么作用??
相对Resource下的资源AB包更好管理资源
减少包的体积大小
压缩资源
减少初始包的大小
打包时候AB可以放在远端,初始包只留一些默认资源。进入游戏之后再慢慢下载。
热更新
资源热更新
脚本热更新
AB包资源打包
如何让资源关联AB包
我们把一个场景物体拖成预制体,再inspector窗口就能看到如下内容(其他资源也可以去关联)
第一个标签为:打入哪个包中。
第二个标签为:扩展名(不动就行 )
- 这样就把Cube这个物体关联到了model这个包里面
疑问:C#脚本不能打包进去,但是物体上关联的很多组件不也算是脚本吗?为什么可以打包
答:预制体上面的一些组件,看起来是脚本,实际上都是C#通过反射得到的文件信息
AB包打包
指定平台打包
打包后的路径
压缩方式
压缩方式默认有两种
LZMA压缩
LZMA是整体压缩,我们用一个包里面内容,就会把整个AB包全压缩出来,压缩比很高,内存占用高
LZ4
LZ4小包压缩,用哪个压哪个,内存占用低
Clear Folders:是否清空文件夹 重新打包
Copy To StreamingAssets : 是否拷贝到StreamingAssets文件夹
打包后会出现
一个主包和若干AB包资源文件和配置文件
manifest文件
这是AB包文件信息,里面有资源信息、依赖关系、版本信息等等
主包(和目录名一样的包)
主要记录AB包的一依赖关系
- 这个页面主要是查看打包后,包的大小
使用AB包中资源文件
同步加载
注:AB包不能重复加载,否则报错
1
2
3
4
5
6
7
8 //第一步 加载AB包
AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "model");
//第二步 加载包中资源
//只使用名字加载会出现 同名不同类型资源分不清
//建议使用泛型加载或者Type 指定类型
//AB包不能重复加载,否则报错
GameObject gameObject = ab.LoadAsset<GameObject>("Cube");
Instantiate(gameObject);
异步加载
1
2
3
4
5
6
7
8 IEnumerator LoadABRes(string ABName, string resName)
{
AssetBundleCreateRequest ab = AssetBundle.LoadFromFileAsync(Application.streamingAssetsPath + "/" + ABName);
yield return ab;
AssetBundleRequest abq = ab.assetBundle.LoadAssetAsync<GameObject>(resName);
yield return abq;
Instantiate(abq.asset as GameObject);
}
AB包卸载
1
2
3
4 //ture是不仅会卸载Ab包,AB包加载资源也会被卸载
AssetBundle.UnloadAllAssetBundles(false);
//单独卸载一个包
ab.Unload(fasle)
AB包依赖
- 一个资源身上用了别的AB包中的资源,这个时候如果只加载自己的AB包,通过它创建对象,就会出现资源丢失
- 比如:材质和预制体分来打包,只加载预制体,就会丢失材质
- 这种时候 需要把依赖包 一起加载了 才正常
疑问:如果不知道依赖关系呢??
- 我们可以利
用主包获取依赖关系
1
2
3
4
5
6 //加载主包
AssetBundle abMain = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "PC");
//加载主包中的固定文件
AssetBundleManifest abManifest = abMain.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
//得到依赖包名字的数组
string[] strs = abManifest.GetAllDependencies(Application.streamingAssetsPath + "/" + "model");
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 游戏开发笔记!
评论