AlicizaX/Client/Assets/Scripts/Startup/Procedure/ProcedureDownloadBundleState.cs

78 lines
2.6 KiB
C#
Raw Normal View History

2025-10-14 15:42:34 +08:00
using AlicizaX.Resource.Runtime;
using AlicizaX;
using Cysharp.Threading.Tasks;
using UnityEngine;
using YooAsset;
namespace Unity.Startup.Procedure
{
2025-11-18 16:15:26 +08:00
internal sealed class ProcedureDownloadBundleState : ProcedureBase
2025-10-14 15:42:34 +08:00
{
ResourceDownloaderOperation downloader;
protected override void OnEnter()
{
CreateDownloader();
}
2025-11-18 16:15:26 +08:00
protected override void OnLeave()
2025-10-14 15:42:34 +08:00
{
downloader.CancelDownload();
downloader = null;
}
private void CreateDownloader()
{
2026-03-26 16:15:18 +08:00
downloader = AppServices.Require<IResourceService>().CreateResourceDownloader();
2025-10-14 15:42:34 +08:00
if (downloader.TotalDownloadCount == 0)
{
Log.Info("没有发现需要下载的资源");
2025-11-18 16:15:26 +08:00
SwitchProcedure<ProcedurePatchDoneState>();
2025-10-14 15:42:34 +08:00
}
else
{
// 发现新更新文件后,挂起流程系统
int totalDownloadCount = downloader.TotalDownloadCount;
long totalDownloadBytes = downloader.TotalDownloadBytes;
float sizeMb = totalDownloadBytes / 1048576f;
sizeMb = Mathf.Clamp(sizeMb, 0.1f, float.MaxValue);
string totalSizeMb = sizeMb.ToString("f1");
Log.Info($"一共发现了{downloader.TotalDownloadCount}个资源需要更新下载,总共需要下载文件大小为:{totalSizeMb}!");
DownloadFiles().Forget();
}
}
private async UniTask DownloadFiles()
{
// 注册下载回调
void DownloaderOnDownloadErrorCallback(DownloadErrorData data)
{
Log.Error($"PackagegName:{data.PackageName} FileName:{data.FileName} Error:{data.ErrorInfo}");
CreateDownloader();
}
downloader.DownloadErrorCallback = DownloaderOnDownloadErrorCallback;
downloader.DownloadUpdateCallback = OnDownloadProgressCallback;
downloader.BeginDownload();
await downloader;
// 检测下载结果
if (downloader.Status != EOperationStatus.Succeed)
{
Log.Error("资源更新失败!");
return;
}
2025-11-18 16:15:26 +08:00
SwitchProcedure<ProcedurePatchDoneState>();
2025-10-14 15:42:34 +08:00
}
private void OnDownloadProgressCallback(DownloadUpdateData data)
{
2026-03-23 20:50:25 +08:00
EventBus.Publish(AssetDownloadProgressUpdateEventArgs.Create(data.PackageName, data.TotalDownloadCount, data.CurrentDownloadCount, data.TotalDownloadBytes, data.CurrentDownloadBytes));
2025-10-14 15:42:34 +08:00
}
}
}