[游戏开发][Unity]Assetbundle下载篇(3)根据AB包清单数据创建下载列表

目录

打包与资源加载框架目录

正文

上图是AB包清单

PatchElement类是每一行数据,第一篇文章有讲

private void GetDownloadList(PatchManifest target)
{
    _patcher.DownloadList.Clear();

    // 临时下载列表
    List<PatchElement> downloadList = new List<PatchElement>(1000);

    string style = PatchHelper.GetPackStyle();
    MotionLog.Log(ELogLevel.Log, $"style is {style}");
    
    // 准备下载列表
    foreach (var pair in target.Elements)
    {
        PatchElement webElement = pair.Value;

        PatchElement localElement;
        if (_patcher.SandboxPatchManifest.Elements.TryGetValue(webElement.Name, out localElement))
        {
            //SandboxPatchManifest版本中 有该资源(即之前的版本更新时下载过该文件)
        }
        else if (_patcher.AppPatchManifest.Elements.TryGetValue(webElement.Name, out localElement))
        {
            //AppPatchManifest版本中 有该资源(即之前的版本更新中没有下载过该文件,但在apk/iap包中有该资源)
        }

        if (localElement == null
            || (style == PATCH_STYLE.INGAME && !_patcher.DownloadInGame && localElement.Tag == PATCH_STYLE.INGAME)
            || (localElement.MD5 != webElement.MD5 && (style == PATCH_STYLE.NORMAL || localElement.Tag == PATCH_STYLE.BUILDIN)))
        {

            //判断下载中断和意外退出造成的更新文件损坏等情况放到下一个流程,避免这里检查每个文件造成app假死
            downloadList.Add(webElement);
        }
    }

    // 如果下载列表为空
    if(downloadList.Count == 0)
    {                
        _patcher.Switch(EPatchStates.DownloadWebPatchManifest.ToString());
    }
    else
    {
        // 最后添加到正式下载列表里
        _patcher.DownloadList.AddRange(downloadList);
        downloadList.Clear();

        // 发现新更新文件后,挂起流程系统
        int totalDownloadCount = _patcher.DownloadList.Count;
        long totalDownloadSizeKB = 0;
        foreach (var element in _patcher.DownloadList)
        {
            totalDownloadSizeKB += element.SizeKB;
        }
        PatchEventDispatcher.SendFoundUpdateFilesMsg(totalDownloadCount, totalDownloadSizeKB);
    }
}

重点看foreach循环遍历每一行数据

该AB包数据是否加入列表要经过下面几个筛选

  1. 判断persistentDataPath沙盒目录是否存在该AB包,如果存在证明之前下载过,无需加入下载列表。

  1. 判断StreamingAsset目录中是否存在该AB包,如果存在证明打包时该AB包已经在包体里,无需加入下载列表。

  1. 如果该AB包的下载类型是游戏内下载,或者叫边玩边下,那么不需要在游戏启动热更时下载,无需加入下载列表

经过上面3个筛选,最终生成了下载列表,下载列表生成后,通常来说需要在UI上显示,告知用户需要下载的文件数量和大小,如果你的项目需要用户点击确认下载,则通过方法或者事件系统告知UI下载数量和下载大小。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Little丶Seven

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

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

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

打赏作者

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

抵扣说明:

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

余额充值