一、资源分析
本章讲解资源清单比对成功后下载的问题。如有疑问,请跳转至上一章节。
说明:所讲内容基于 YooAsset 2.3.9 版本
上一篇讲解了安装、配置、构建、比对资源等问题,并在 InitPackage 函数中初始化包,并进行了比对操作,此时并没有进行真正的资源下载操作,如图:
- 首包资源比对

- 后续版本比对

由此可见,若下载差异化文件,我们还需要继续书写相关代码。
二、资源下载
1、创建下载函数,注册回调函数。
/// 下载清单数据
private IEnumerator DownloadPackage()
{
var downloadingMaxNumber = 10; //同时下载的最大文件数
var failedTryAgain = 3; //下载失败的重试次数
var package = YooAssets.GetPackage("DefaultPackage"); //"DefaultPackage"包已在 InitYooAssets 函数中创建
// 创建资源下载器,用于下载当前资源版本所有的资源包文件
var downloader = package.CreateResourceDownloader(downloadingMaxNumber, failedTryAgain);
//判断是否需要下载
if (downloader.TotalDownloadCount == 0)
{
print("没有资源需要更新,直接进入游戏...");
yield return EnterGame();
}
//统计的下载文件总数量和总大小
var totalDownloadCount = downloader.TotalDownloadCount;
var totalDownloadedBytes = downloader.TotalDownloadBytes;
print($"需要下载的文件总数 = {totalDownloadCount},总大小 = {totalDownloadedBytes / 1024}KB");
downloader.DownloadFinishCallback += DownloadFinishCallback;
downloader.DownloadUpdateCallback += DownloadUpdateCallback;
downloader.DownloadErrorCallback += DownloadErrorCallback;
downloader.DownloadFileBeginCallback += DownloadFileBeginCallback;
// 例如:把关卡资源下载器和某个资源下载器进行合并
// var downloader1 = package.CreateResourceDownloader("关卡资源", downloadingMaxNum, failedTryAgain);
// var downloader2 = package.CreateBundleDownloader("某个资源", downloadingMaxNum, failedTryAgain);
// downloader1.Combine(downloader2);
//开启下载
// downloader1.BeginDownload(); //合并下载
downloader.BeginDownload();
yield return downloader;
//检测下载结果
if (downloader.Status == EOperationStatus.Succeed)
{
print("下载操作完成");
}
else
{
print("下载操作失败。。。");
//日志记录
}
yield return EnterGame();
}
/// 当下载器结束(无论成功或失败)
private void DownloadFinishCallback(DownloaderFinishData data)
{
print($"下载结束:包名 = {data.PackageName},是否完成 = {(data.Succeed ? "完成" : "失败")}");
}
/// 当下载进度发生变化
private void DownloadUpdateCallback(DownloadUpdateData data)
{
print(
$"包名 = {data.PackageName},文件总数 = {data.TotalDownloadCount},当前文件下载数量 = {data.CurrentDownloadCount},文件总大小 = {data.TotalDownloadBytes / 1024}KB,已下载大小 = {data.CurrentDownloadBytes / 1024}KB");
}
/// 当下载器发生错误
private void DownloadErrorCallback(DownloadErrorData data)
{
print($"下载失败:包名 = {data.PackageName},文件名 = {data.FileName},错误信息 = {data.ErrorInfo}");
}
/// 当开始下载某个文件
private void DownloadFileBeginCallback(DownloadFileData data)
{
print($"开始下载:包名 = {data.PackageName},文件名 = {data.FileName},文件大小 = {data.FileSize / 1024} KB");
}
上述函数演示了如何下载差异化资源数据,根据个人项目需求更改回调逻辑。
将此函数放置于 InitPackage 函数中,如图:

注:根据个人项目逻辑选择即可
2、HFS模拟的远程服务器相关数据反馈,如图:
可以清晰的看到程序访问及下载的内容,首先下载比对版本,然后下载了差异化数据。
3542

被折叠的 条评论
为什么被折叠?



