一、AssetBundle是什么
- 特定于平台的资产压缩包,优点类似于压缩文件。
- 资产包括:模型、贴图、预设体、音效、材质等 。C#脚本不能打进AB包,只能通过包中信息加载场景中的脚本,这也是为什么使用Lua热更新脚本的原因。
二、AssetBundle有什么作用:
-
相对于Resources下的资源AB包更好的管理资源;
-
1.Resources打包时定死(只读),无法修改文件夹中的内容;
-
2.AB包的存储位置可自定,压缩方式自定义,后期可以动态更新;
-
-
减少包体大小
- 1.压缩资源
- 2.减少初始包的大小(大场景中场景可以分包加载)
-
实现热更新
-
1.资源热更新;
-
2.脚本热更新;
-
三、生成AB包资源文件
AB包生成的文件:
-
AB包文件
- 资源文件
-
manifest文件(AB包信息文件)
- manifest文件
当加载信息时,提供了关键信息(资源信息、依赖信息、版本信息等等)
- manifest文件
-
关键AB包(生成一个和目录名一样的包)
- 主包
记录AB包依赖关键信息
(很重要!!!)
- 主包
四:AssetBundle需要注意的问题
1.关于AB包C#脚本的问题:
如果场景中的预设体身上带有脚本需要打包进AB包中,预设体上的脚本看起来像是我们的脚本,其实就是利用反射来做的一个机制,预设体上的脚本本质就是记录着一堆数据而已,打包到AB包里的不是C#脚本本身,,而是预设体关联的脚本数据,预设体就是一个文件,每一个脚本都会有一个ID,预设体不是把脚本打成了AB包,而是把关联的数据打包到AB包中。
2.AB包打包需要注意的问题
AB包打包需要指定平台打包,每个平台需要对应自己的AB包;
3.加载AB包需要注意的问题
加载步骤:
- 加载AB包
- 加载AB包中的资源
在用脚本加载AB包时,相同的包只能加载一次,多次加载会报错,AB包加载一次便可以N次加载包中的资源
。
void Start()
{
AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath+"/"+ "moudle");
//只使用名字加载 会出现 同名不同类型资源 分不清
GameObject obj= ab.LoadAsset<GameObject>("Cube");
//这里就是第二次加载
AssetBundle ab2 = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "moudle");
GameObject obj2 = ab2.LoadAsset("Cube", typeof(GameObject)) as GameObject;
Instantiate(obj2);
}
报错信息:The AssetBundle 'moudle' can't be loaded because another AssetBundle with the same files is already loaded.
后续我会在补充更新!!!!如有错误请指出,谢谢。