UH1L1——AB包资源打包

本章代码关键字

1
BuildPipeline.BuildAssetBundles()    // 调用此方法时,Unity会自动把所有设置了AssetBundle名字的资源打包为AssetBundle

AB包资源打包工具选择

  1. 使用 Unity 编辑器开发的自定义打包工具
  2. 官方提供好的打包工具:AssetBundles-Browser-master

关于高版本Unity导入AssetBundles-Browser-master

对于高版本Unity中,AssetBundles-Browser 已经不能通过包管理器进行下载(发现包管理器中没有对应工具不用着急)
因为:高版本 Unity 用 Addressables 功能封装了AB包功能

你仍然可以在资料区下载 AssetBundles-Browser-master 包文件导入你的工程中
或者从 github 上去获取该脚本:Releases · Unity-Technologies/AssetBundles-Browser (github.com),下载最晚发布的源代码即可
若导入后报错,只需删除导入内容中的示例文件夹(Test 文件夹)即可

打开AssetBundles-Browser窗口

点击工具栏:Window ——> AssetBundle Browser

image

如何将资源与AB包关联起来

选择需要关联的资源,在其 Inspector 窗口底部的 AssetBundle 处,选择需要打包到的 AB 包或者新建一个 AB 包

image

后面的选项是拓展名,我们现在不需要去修改它

之后打开 AssetBundles-Browser 窗口就可以在 Configure(配置)看到这个AB包了

要注意,AssetBundles 不能打包 C# 脚本文件,即使打包的预设体挂载了 C# 脚本,在 Inspector 窗口上可以看见,
那也不是 C# 脚本文件本身,因为 Unity 是使用 反射机制 来调用 C# 脚本的,预制体文件实际存储的是关联的脚本的 ID 与数据罢了

通过 API 构建 AssetBundles 包

BuildPipeline.BuildAssetBundles()​ 方法是构建所有 AB 包的方法,
调用此方法时,Unity 会自动把所有设置了 AssetBundle 的资源打包为 AssetBundle,
被打包的资源所属的 AssetBundle 名字和资源在 Inspector 窗口底部的设置的 AssetBundle 名字一致

  • 参数一:打包路径
  • 参数二:BuildAssetBundleOptions​ 枚举,即 AssetBundle 压缩格式
  • 参数三:BuildTarget​ 枚举,即 AssetBundle 目标构建平台
  • 返回值:所有构建出来的 AssetBundle 清单

假设要打包如下的资源,它们的 AssetBundle 分别设置为 ab1.bundle​,ab2.bundle​,ab3.bundle​,
并打包到项目文件夹下和 Assets 文件夹同级的 AssetBundle 文件夹内

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System.IO;
using UnityEditor;
using UnityEngine;

public class BuildAssetBundleTest
{
public static string BundleOutputPath => Application.dataPath + "/../AssetBundle";

[MenuItem("Tools/BuildAssetBundle")]
public static void BuildAssetBundle()
{
if (!Directory.Exists(BundleOutputPath))
{
Directory.CreateDirectory(BundleOutputPath);
}

BuildPipeline.BuildAssetBundles(
BundleOutputPath, // 打包路径
BuildAssetBundleOptions.ChunkBasedCompression, // 打包格式
BuildTarget.StandaloneWindows); // 目标平台
}
}

点击 Tools/BuildAssetBundle​ 选项后,即可在打包路径内看到构建出来的 AB 包:

image

AssetBundlesBrowser 构建参数相关

AssetBundles-Browser 是 Unity 官方提供的 AB 包打包工具,它封装了 BuildPipeline​ 等构建相关的接口

image

  • build(构建页签)

    • BuildTarget:目标平台

    • Output Path:目标输出路径

    • Clear Folders:是否清空文件夹,重新打包

    • Copy To StreamingAssets:是否拷贝到StreamingAssets

    • Compression 压缩方式

      • NoCompression - 不压缩,解压快,包较大,不推荐

      • LZMA - 压缩最小,解压慢

        缺点:用一个资源,要解压所有文件

      • LZ4 - 压缩,相对LZMA大一点点

        建议使用,用什么解压什么,内存占用低

    • Exclude Type Information - 排除类型信息

      在资源包中,不包含资源的类型信息

    • Force Rebuild - 强制重新构建

      重新打包时需要重新构建包
      和Clear Folders不同,它不会删除不再存在的包

    • Ignore Type Tree Changes - 忽略类型树的改变

      • 增量构建检查时,忽略类型数的更改
    • Append Hash - 将文件哈希值附加到资源包名上

    • Strict Mode - 严格模式

      如果打包时报错了,则打包直接失败无法成功

    • Dry Run Build - 运行时构建

AB 包打包到的位置与结构

除了 Build 页签中选择 Copy To StreamingAssets 后会复制到 StreamingAssets 文件夹的AB包
真正的 AB 包文件会打包到工程文件夹下的 AssetBundles 文件夹下

image

我们将 model 包打包到 AssetBundles/PC 文件夹下,在这个文件夹下可以看到如下文件

image

  • AB 包生成的文件

    • AB 包文件 - 资源文件

    • manifest 文件 - AB 包文件信息

      当加载时,提供了关键信息
      资源信息,依赖关系,版本信息等等

    • 关键 AB 包(和目录名一样的包)- 主包

      AB包依赖关键信息

其中 PC 这个文件并不是我们手动打的 AB 包,而是 主包,这个文件是原来存储 AB 包之间相互依赖关系的文件
而 model 文件是真正的我们打包出去的 AB 包
除了这些没有后缀名的文件,还有一些后缀为 .manifest​ 的文件,它们是AB包的配置文件,包括打包了哪些文件等一系列信息

AssetBundlesBrowser 的查看 AB 包相关

将存储 AB 包的文件夹或文件添加进去,我们可以看到 AB 包的一系列信息

image