打包AB包
在 Unity 中,AssetBundle(AB 包)是一种用于存储和管理游戏资源的机制,它可以将多种类型的资源(如模型、纹理、音频等)打包成独立的文件,方便在游戏运行时动态加载和使用。以下详细介绍 Unity 打包 AB 包的原理:
资源收集
标记资源:在 Unity 编辑器中,开发者需要为想要打包到 AB 包中的资源标记 AssetBundle 名称。可以通过资源的 Inspector 面板中的 “AssetBundle” 字段来进行设置。一个 AB 包可以包含多个资源,一个资源也可以被标记到多个 AB 包中。
依赖分析:Unity 会自动分析被标记资源之间的依赖关系。例如,一个材质可能依赖于特定的纹理,Unity 会确保这些依赖资源也被正确地包含在 AB 包中,避免资源缺失。
资源序列化
数据转换:在打包过程中,Unity 会将资源从其原始的编辑格式转换为可以在运行时高效加载和使用的二进制格式。例如,纹理会被压缩成适合不同平台的纹理格式,模型会被转换为特定的网格数据格式。
序列化处理:Unity 使用序列化技术将资源对象及其属性转换为字节流,以便存储在 AB 包文件中。序列化过程会保留资源的所有必要信息,包括其类型、属性值和与其他资源的关联关系。
打包压缩
文件生成:经过序列化处理后,Unity 会将所有相关资源的字节流合并到一个或多个 AB 包文件中。每个 AB 包文件都有自己的文件头,包含了关于该包的元信息,如包的版本、包含的资源列表等。
压缩算法:为了减小 AB 包的文件大小,Unity 支持多种压缩算法,如 LZMA 和 LZ4。LZMA 压缩率高,但压缩和解压缩速度较慢;LZ4 压缩率相对较低,但压缩和解压缩速度快,适合需要快速加载的资源。开发者可以根据具体需求选择合适的压缩算法。
打包配置与管理
BuildPipeline API:Unity 提供了BuildPipeline类中的相关 API 来进行 AB 包的打包操作,如BuildPipeline.BuildAssetBundles方法。开发者可以通过设置不同的参数来控制打包过程,如目标平台、压缩选项、输出路径等。
版本管理:在打包过程中,还需要考虑 AB 包的版本管理。可以为每个 AB 包分配一个唯一的版本号,以便在游戏更新时能够正确地识别和加载最新的资源包。
记得设置预制体的名称和后缀名称,平台不一样也需要改一下
webgl:BuildTarget.WebGL
PC : BuildTarget.StandaloneWindows64
代码如下:
using UnityEngine;
using UnityEditor;
using System.IO;
public class BuildAssetBundle : MonoBehaviour
{
[MenuItem("Tools/打AB包")]
public static void BuildAB()
{
string dir = Application.streamingAssetsPath; //定义AB包路径:工程目录下的StreamingAssets
if (Directory.Exists(dir) == false)//如果不存在文件夹,那么新建一个
{
Directory.CreateDirectory(dir);
}
BuildPipeline.BuildAssetBundles(dir,
BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.WebGL);
AssetDatabase.Refresh();
Debug.LogError("打包完成");
}
}