diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderDefine.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderDefine.cs
new file mode 100644
index 00000000..c6049b53
--- /dev/null
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderDefine.cs
@@ -0,0 +1,97 @@
+
+namespace YooAsset
+{
+ ///
+ /// 下载器结束
+ ///
+ public struct DownloaderFinishData
+ {
+ ///
+ /// 所属包裹名称
+ ///
+ public string PackageName;
+
+ ///
+ /// 是否成功
+ ///
+ public bool Succeed;
+ }
+
+ ///
+ /// 下载器相关的更新数据
+ ///
+ public struct DownloadUpdateData
+ {
+ ///
+ /// 所属包裹名称
+ ///
+ public string PackageName;
+
+ ///
+ /// 下载进度 (0-1f)
+ ///
+ public float Progress;
+
+ ///
+ /// 下载文件总数
+ ///
+ public int TotalDownloadCount;
+
+ ///
+ /// 当前完成的下载文件数量
+ ///
+ public int CurrentDownloadCount;
+
+ ///
+ /// 下载数据总大小(单位:字节)
+ ///
+ public long TotalDownloadBytes;
+
+ ///
+ /// 当前完成的下载数据大小(单位:字节)
+ ///
+ public long CurrentDownloadBytes;
+ }
+
+ ///
+ /// 下载器相关的错误数据
+ ///
+ public struct DownloadErrorData
+ {
+ ///
+ /// 所属包裹名称
+ ///
+ public string PackageName;
+
+ ///
+ /// 下载失败的文件名称
+ ///
+ public string FileName;
+
+ ///
+ /// 错误信息
+ ///
+ public string ErrorInfo;
+ }
+
+ ///
+ /// 下载器相关的文件数据
+ ///
+ public struct DownloadFileData
+ {
+ ///
+ /// 所属包裹名称
+ ///
+ public string PackageName;
+
+ ///
+ /// 下载的文件名称
+ ///
+ public string FileName;
+
+ ///
+ /// 下载的文件大小
+ ///
+ public long FileSize;
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderDefine.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderDefine.cs.meta
new file mode 100644
index 00000000..89c05103
--- /dev/null
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderDefine.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6602c4be2ef295546b7bbb328de8fb0c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderOperation.cs
index f713f1e0..1997d577 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/DownloaderOperation.cs
@@ -15,10 +15,27 @@ namespace YooAsset
private const int MAX_LOADER_COUNT = 64;
- public delegate void OnDownloadOver(bool isSucceed);
- public delegate void OnDownloadProgress(int totalDownloadCount, int currentDownloadCount, long totalDownloadBytes, long currentDownloadBytes);
- public delegate void OnDownloadError(string fileName, string error);
- public delegate void OnStartDownloadFile(string fileName, long sizeBytes);
+ #region 委托定义
+ ///
+ /// 下载器结束
+ ///
+ public delegate void DownloaderFinish(DownloaderFinishData data);
+
+ ///
+ /// 下载进度更新
+ ///
+ public delegate void DownloadUpdate(DownloadUpdateData data);
+
+ ///
+ /// 下载发生错误
+ ///
+ public delegate void DownloadError(DownloadErrorData data);
+
+ ///
+ /// 开始下载某个文件
+ ///
+ public delegate void DownloadFileBegin(DownloadFileData data);
+ #endregion
private readonly string _packageName;
private readonly int _downloadingMaxNumber;
@@ -67,23 +84,23 @@ namespace YooAsset
///
/// 当下载器结束(无论成功或失败)
///
- public OnDownloadOver OnDownloadOverCallback { set; get; }
+ public DownloaderFinish DownloadFinishCallback { set; get; }
///
/// 当下载进度发生变化
///
- public OnDownloadProgress OnDownloadProgressCallback { set; get; }
+ public DownloadUpdate DownloadUpdateCallback { set; get; }
///
- /// 当某个文件下载失败
+ /// 当下载器发生错误
///
- public OnDownloadError OnDownloadErrorCallback { set; get; }
+ public DownloadError DownloadErrorCallback { set; get; }
///
/// 当开始下载某个文件
///
- public OnStartDownloadFile OnStartDownloadFileCallback { set; get; }
-
+ public DownloadFileBegin DownloadFileBeginCallback { set; get; }
+
internal DownloaderOperation(string packageName, List downloadList, int downloadingMaxNumber, int failedTryAgain, int timeout)
{
@@ -160,7 +177,18 @@ namespace YooAsset
_lastDownloadBytes = downloadBytes;
_lastDownloadCount = _cachedDownloadCount;
Progress = (float)_lastDownloadBytes / TotalDownloadBytes;
- OnDownloadProgressCallback?.Invoke(TotalDownloadCount, _lastDownloadCount, TotalDownloadBytes, _lastDownloadBytes);
+
+ if (DownloadUpdateCallback != null)
+ {
+ var data = new DownloadUpdateData();
+ data.PackageName = _packageName;
+ data.Progress = Progress;
+ data.TotalDownloadCount = TotalDownloadCount;
+ data.CurrentDownloadCount = _lastDownloadCount;
+ data.TotalDownloadBytes = TotalDownloadBytes;
+ data.CurrentDownloadBytes = _lastDownloadBytes;
+ DownloadUpdateCallback.Invoke(data);
+ }
}
// 动态创建新的下载器到最大数量限制
@@ -177,7 +205,15 @@ namespace YooAsset
var downloader = bundleInfo.CreateDownloader(_failedTryAgain, _timeout);
_downloaders.Add(downloader);
_bundleInfoList.RemoveAt(index);
- OnStartDownloadFileCallback?.Invoke(bundleInfo.Bundle.BundleName, bundleInfo.Bundle.FileSize);
+
+ if (DownloadFileBeginCallback != null)
+ {
+ var data = new DownloadFileData();
+ data.PackageName = _packageName;
+ data.FileName = bundleInfo.Bundle.BundleName;
+ data.FileSize = bundleInfo.Bundle.FileSize;
+ DownloadFileBeginCallback.Invoke(data);
+ }
}
}
@@ -191,15 +227,37 @@ namespace YooAsset
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = $"Failed to download file : {bundleName}";
- OnDownloadErrorCallback?.Invoke(bundleName, failedDownloader.Error);
- OnDownloadOverCallback?.Invoke(false);
+
+ if (DownloadErrorCallback != null)
+ {
+ var data = new DownloadErrorData();
+ data.PackageName = _packageName;
+ data.FileName = bundleName;
+ data.ErrorInfo = failedDownloader.Error;
+ DownloadErrorCallback.Invoke(data);
+ }
+
+ if (DownloadFinishCallback != null)
+ {
+ var data = new DownloaderFinishData();
+ data.PackageName = _packageName;
+ data.Succeed = false;
+ DownloadFinishCallback.Invoke(data);
+ }
}
else
{
// 结算成功
_steps = ESteps.Done;
Status = EOperationStatus.Succeed;
- OnDownloadOverCallback?.Invoke(true);
+
+ if (DownloadFinishCallback != null)
+ {
+ var data = new DownloaderFinishData();
+ data.PackageName = _packageName;
+ data.Succeed = true;
+ DownloadFinishCallback.Invoke(data);
+ }
}
}
}