Unity之热更新:(一)AssetBundle


1. AB包是什么?  资源压缩文件,包含了serialized file(序列化文件)和resource file(源文件:二进制资源(图片、声音)被单独保存)

2. AB包有什么作用?减少包体大小,比Resources灵活;

3. AB包资源打包:

  1)Unity编辑器,自定义打包工具

  2)官方提供打包工具:Asset Bundle Browser

4. AB打包流程:

  1)指定资源的AssetBundle属性

  2)构建AssetBundle包

  3)上传AB包

  4)加载AB包

5. 打包分组策略:

  1)逻辑实体分组:一个UI界面一个包、一个角色一个包、场景共享部分一个包

  2)类型分组:声音资源一个包、shader一个包、模型一个包、材质一个包

  3)使用分组:一个关卡一个包、一个场景一个包

  依赖打包:共享资源单独打一个包(否则每个使用该资源的物体都会打包一个该资源,会占用更多空间。

  比如两个物体都用了同一个材质,如果把两个物体打包,则会生成 (物体A+材质)+(物体B+材质),若把共享材质打一个包,

  再把两物体打包,则会生成 共享材质+物体A+物体B)

6. 实例演示

  1)指定资源的AssetBundle属性  

  2)构建AssetBundle包

1     //把打包方法设置为菜单组件 
2     [MenuItem("Assets/Build AssetBundles")]  //MenuItem属性允许把自定义静态函数当做菜单命令添加到主菜单和检视面板
3     static void Build_AssetBundles()
4     {
5         BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
6     }
//第一个参数:打包路径;第二个参数:打包设置;第三个参数:打包目标平台

 第二个参数 BuildAssetBundleOptions

  • None:LZMA算法压缩,压缩包的最小,但加载时间长(解压)。
  • UncompressedAssetBundle:不压缩,包大,加载快
  • ChunkBasedCompression:LZ4压缩,压缩率

StreamingAssets文件夹详解参考https://blog.csdn.net/iningwei/article/details/89097130

注意设置菜单组件脚本要放在Editor文件夹下才有效

打包之前要先把打包文件夹建好

 可以让资源按文件夹分类打包

打包出来的mainfest文件是什么?我们可以用记事本打开该文件Assets:声明了包含的Object及路径,Dependencies:声明了依赖的文件

  4)加载本地AB包

  a.加载单个资源

AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath+"/prefabs/001.unity3d");
GameObject myPrefab = ab.LoadAsset("Cube");  //注意这里传入的名称是打包前单个物体的名称
Instantiate(myPrefab);

  b.加载多个资源

AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath+"/prefabs/001.unity3d");
Object[] myPrefabs = ab.LoadAllAssets();  //取出001包里 Sphere Cube Ground三个物体
foreach (var v in myPrefabs)
{
    Instantiate(v);  //把资源实例化
}

其他加载方式与上传方式,见siki学院视频https://www.bilibili.com/video/BV1Yb4y1U7nt?p=17