[游戏开发][Unity]Assetbundle打包篇(4)开始打包

目录

打包与资源加载框架目录

正文

上一篇文章讲了如何收集打包资源,得到了一个List<AssetInfo>

下面正式进入打包流程,调用PostAssetBuild方法即可开始正式打包流程


public void PostAssetBuild()
{
    Debug.Log("------------------------------OnPostAssetBuild------------------------------");
    // 准备工作
    List<AssetBundleBuild> buildInfoList = new List<AssetBundleBuild>();
    List<AssetInfo> buildMap = GetBuildMap();
    if (buildMap.Count == 0)
        throw new Exception("[BuildPatch] 构建列表不能为空");
    Log($"构建列表里总共有{buildMap.Count}个资源需要构建");
    for (int i = 0; i < buildMap.Count; i++)
    {
        AssetInfo assetInfo = buildMap[i];
        AssetBundleBuild buildInfo = new AssetBundleBuild();
        buildInfo.assetBundleName = assetInfo.AssetBundleLabel;
        buildInfo.assetBundleVariant = assetInfo.AssetBundleVariant;
        buildInfo.assetNames = new string[] { assetInfo.AssetPath };
        buildInfoList.Add(buildInfo);
        string createdLabel = $"{assetInfo.AssetBundleLabel}.{assetInfo.AssetBundleVariant}".ToLower();
        if(!_labelToAssets.TryGetValue(createdLabel, out var list))
        {
            list = new List<AssetInfo>();
            _labelToAssets.Add(createdLabel, list);
        }
        list.Add(assetInfo);
    }
    // 开始构建
    Log($"开始构建......");
    //参数3在前面的文章已经讲过了
    BuildAssetBundleOptions opt = MakeBuildOptions();
    AssetBundleManifest buildManifest = BuildPipeline.BuildAssetBundles(OutputPath, buildInfoList.ToArray(), opt, BuildTarget);
    if (buildManifest == null)
        throw new Exception("[BuildPatch] 构建过程中发生错误!");
}

调用GetBuildMap()获取打包资源在上一篇文章有代码

下一步就是处理List<AssetInfo>,把它变成打包API能识别的List<AssetBundleBuild>

BuildAssetBundleOptions opt 参考该系列文章第一篇

写一个GUI界面,点击build时调用PostAssetBuild(),还可以手动选择BuildAssetBundleOptions的相关参数。

插入一个知识点

压缩大小:lzma比lz4小。
压缩与解压缩时间:lzma远高于lz4.

现在项目都选LZ4的原因,LZ4比LZMA压缩和解压缩都快,就算LAMA压缩的小也不用它。

LZ4还有一个优势,调用LoadFromFile加载AB包时,只会加载AB包的Header,这一步加载并不会发生解压缩的,之后需要什么资源再加载那部分的AB包chunk,加载资源时才会发生解压缩,极大的减少了内存占用。


打包后的的文件夹内有这些文件

看上图,3个名字特别长的就是资源包,为何是3个包,因为我的打包目标路径是Assets/Works/Resource,而该目录下正好有3个资源

UnityManifest.manifest文件是所有AB包的记录文件,同时也会记录该AB包引用了哪些AB包,用NotePad++打开UnityManifest.manifest文件

很明显, AssetBundleInfos:就是外面文件夹的三个ab包,为何每个AB包的名字是一长串数字,原因是在打包设置中,我把ab包的名字转换成了MD5码,在文章3中有介绍。

下面是一个AB包的引用信息。


上文完成了一次打包,并且成功打包除了目标文件,美中不足的是,UnityManifest.manifest虽然记录了每个AB包的名字以及依赖AB包信息,但是,这些信息没有包含该AB包的版本信息、版本号,以及没有显示我们的版本信息,还有就是前篇文章提到的,该AB包是启动时热更,还是游戏内热更。因此,我们需要对UnityManifest.manifest进行二次优化。详情见下篇文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Little丶Seven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值