Unity打包AB包

简介: 在 Unity 中,AssetBundle(AB 包)用于存储和管理游戏资源,支持动态加载。开发者需为资源标记 AssetBundle 名称,Unity 会自动处理依赖关系并进行序列化。资源被打包成二进制格式,并可选择压缩算法(如 LZMA 或 LZ4)。通过 BuildPipeline API 可控制打包过程,包括设置目标平台(如 WebGL、PC)。示例代码展示了如何使用 BuildPipeline.BuildAssetBundles 方法打包 AB 包并输出到 StreamingAssets 文件夹中。

打包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("打包完成");
    }
}
相关文章
|
9月前
|
存储 图形学 开发者
Unity加载AB包
在 Unity 中加载 AssetBundle(AB 包)涉及文件定位、反序列化和内存管理。本地路径可通过 `Application.dataPath` 或 `Application.persistentDataPath` 获取,结合文件名定位 AB 包。远程 URL 则通过网络请求下载。代码示例展示了从本地和远程加载 AB 包的方法,使用 `UnityWebRequest` 和 `WWW` 类进行资源加载和实例化。
|
图形学 数据安全/隐私保护 iOS开发
Unity与IOS⭐Xcode打包,上架TestFlight的完整教程
Unity与IOS⭐Xcode打包,上架TestFlight的完整教程
|
编解码 算法 图形学
【unity小技巧】减少Unity中的构建打包大小
【unity小技巧】减少Unity中的构建打包大小
603 0
|
缓存 API 图形学
【Unity 3D】AssetBundle打包、上传、加载、卸载详解及演示(附源码)
【Unity 3D】AssetBundle打包、上传、加载、卸载详解及演示(附源码)
757 0
|
算法 图形学 UED
【Unity 3D】AssetBundle工作流程、打包策略详解(超详细必看)
【Unity 3D】AssetBundle工作流程、打包策略详解(超详细必看)
730 0
|
图形学 Android开发
Unity打包安卓报http请求错误
Unity打包安卓报http请求错误
415 1
|
存储 图形学 Android开发
Unity——资产包(Asset Bundles)
Unity——资产包(Asset Bundles)
578 0
|
编译器 图形学 Windows
【unity细节】中文乱码和老包升级的情况
【unity细节】中文乱码和老包升级的情况
304 0
|
Java 图形学
Unity打包符号表 使用ndk addr2line.exe+符号表 将崩溃内存地址解析成函数名
符号表的路径,符号表发布出来的时候是一个zip文件要把它解压出来,里面会有两个文件:arm64-v8a(64位)、armeabi-v7a(32位)不过unity默认打包出来的都是64位的程序,所以这个前面加上你的真实路径+arm64-v8a\libil2cpp.sym.so就可以了。
|
2月前
|
机器学习/深度学习 人工智能 图形学
卓伊凡的第一款独立游戏-详细介绍游戏开发引擎unity-以及详细介绍windows和mac的安装步骤【01】
卓伊凡的第一款独立游戏-详细介绍游戏开发引擎unity-以及详细介绍windows和mac的安装步骤【01】
192 9

热门文章

最新文章