diff --git a/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadBuiltinCatalogOperation.cs b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadBuiltinCatalogOperation.cs
index b5b5aeaa..10b3c62c 100644
--- a/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadBuiltinCatalogOperation.cs
+++ b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadBuiltinCatalogOperation.cs
@@ -31,7 +31,7 @@ namespace YooAsset
///
/// 创建加载内置资源目录操作实例
///
- /// 加载内置资源目录的配置选项
+ /// 加载内置资源目录的操作选项
internal LoadBuiltinCatalogOperation(LoadBuiltinCatalogOptions options)
{
_options = options;
diff --git a/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadLocalArchiveBundleOperation.cs b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadLocalArchiveBundleOperation.cs
index a51b620b..7a0ffdde 100644
--- a/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadLocalArchiveBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadLocalArchiveBundleOperation.cs
@@ -22,7 +22,7 @@ namespace YooAsset
///
/// 创建本地 ArchiveBundle 加载操作实例
///
- /// 从本地加载 ArchiveBundle 的配置选项
+ /// 从本地加载 ArchiveBundle 的操作选项
public LoadLocalArchiveBundleOperation(LoadLocalArchiveBundleOptions options)
{
_options = options;
diff --git a/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadLocalAssetBundleOperation.cs b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadLocalAssetBundleOperation.cs
index 8d2c8894..b2b8d736 100644
--- a/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadLocalAssetBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadLocalAssetBundleOperation.cs
@@ -30,7 +30,7 @@ namespace YooAsset
///
/// 创建本地 AssetBundle 加载操作实例
///
- /// 从本地加载 AssetBundle 的配置选项
+ /// 从本地加载 AssetBundle 的操作选项
public LoadLocalAssetBundleOperation(LoadLocalAssetBundleOptions options)
{
_options = options;
diff --git a/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadLocalRawBundleOperation.cs b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadLocalRawBundleOperation.cs
index 591535f7..b9101cdd 100644
--- a/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadLocalRawBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadLocalRawBundleOperation.cs
@@ -23,7 +23,7 @@ namespace YooAsset
///
/// 创建本地 RawBundle 加载操作实例
///
- /// 从本地加载 RawBundle 的配置选项
+ /// 从本地加载 RawBundle 的操作选项
public LoadLocalRawBundleOperation(LoadLocalRawBundleOptions options)
{
_options = options;
diff --git a/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadWebAssetBundleOperation.cs b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadWebAssetBundleOperation.cs
index ecbb7b85..9b823165 100644
--- a/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadWebAssetBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadWebAssetBundleOperation.cs
@@ -22,9 +22,9 @@ namespace YooAsset
private ESteps _steps = ESteps.None;
///
- /// 创建 LoadWebNormalAssetBundleOperation 实例
+ /// 创建 AssetBundle 加载操作实例
///
- /// 从网络加载 AssetBundle 的配置选项
+ /// 从网络加载 AssetBundle 的操作选项
public LoadWebNormalAssetBundleOperation(LoadWebAssetBundleOptions options)
{
_options = options;
@@ -133,6 +133,7 @@ namespace YooAsset
private enum ESteps
{
None,
+ Prepare,
DataRequest,
CheckRequest,
VerifyData,
@@ -150,9 +151,9 @@ namespace YooAsset
private ESteps _steps = ESteps.None;
///
- /// 创建 LoadWebEncryptedAssetBundleOperation 实例
+ /// 创建网络 AssetBundle 加载操作实例
///
- /// 从网络加载 AssetBundle 的配置选项
+ /// 从网络加载 AssetBundle 的操作选项
public LoadWebEncryptedAssetBundleOperation(LoadWebAssetBundleOptions options)
{
_options = options;
@@ -162,34 +163,27 @@ namespace YooAsset
}
protected override void InternalStart()
{
- _steps = ESteps.DataRequest;
+ _steps = ESteps.Prepare;
}
protected override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
- if (_steps == ESteps.DataRequest)
+ if (_steps == ESteps.Prepare)
{
var decryptor = _options.AssetBundleDecryptor;
if (decryptor == null)
{
_steps = ESteps.Done;
- SetError($"{_options.CacheName} decryptor is null.");
+ SetError($"{_options.CacheName} asset bundle decryptor is null.");
return;
}
if (decryptor is IBundleMemoryDecryptor)
{
_decryptor = decryptor as IBundleMemoryDecryptor;
- string url = _options.DownloadUrlPolicy.SelectUrl(_options.CandidateUrls);
- var args = new DownloadDataRequestArgs(
- url: url,
- timeout: 0,
- watchdogTimeout: _options.WatchdogTimeout);
- _downloadBytesRequest = _options.DownloadBackend.CreateBytesRequest(args);
- _downloadBytesRequest.SendRequest();
- _steps = ESteps.CheckRequest;
+ _steps = ESteps.DataRequest;
}
else
{
@@ -199,6 +193,18 @@ namespace YooAsset
}
}
+ if (_steps == ESteps.DataRequest)
+ {
+ string url = _options.DownloadUrlPolicy.SelectUrl(_options.CandidateUrls);
+ var args = new DownloadDataRequestArgs(
+ url: url,
+ timeout: 0,
+ watchdogTimeout: _options.WatchdogTimeout);
+ _downloadBytesRequest = _options.DownloadBackend.CreateBytesRequest(args);
+ _downloadBytesRequest.SendRequest();
+ _steps = ESteps.CheckRequest;
+ }
+
if (_steps == ESteps.CheckRequest)
{
Progress = _downloadBytesRequest.DownloadProgress;
@@ -225,6 +231,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
SetError(_downloadBytesRequest.Error);
+ YooLogger.LogError(Error);
}
}
}
@@ -246,7 +253,7 @@ namespace YooAsset
}
else
{
- string error = $"[WebBundleVerify] Verify failed. Url: '{_downloadBytesRequest.Url}' Level: {_options.DownloadVerifyLevel} Result: {verifyResult}.";
+ string error = $"Verify failed. Url: '{_downloadBytesRequest.Url}' Level: {_options.DownloadVerifyLevel} Result: {verifyResult}.";
YooLogger.LogWarning(error);
if (IsWaitForCompletion == false && _downloadRetryController.HasRetriesRemaining())
diff --git a/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadWebRawBundleOperation.cs b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadWebRawBundleOperation.cs
new file mode 100644
index 00000000..a91e5dea
--- /dev/null
+++ b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadWebRawBundleOperation.cs
@@ -0,0 +1,212 @@
+namespace YooAsset
+{
+ ///
+ /// 从网络加载 RawBundle 操作
+ ///
+ internal sealed class LoadWebRawBundleOperation : BCLoadBundleOperation
+ {
+ private enum ESteps
+ {
+ None,
+ Prepare,
+ DataRequest,
+ CheckRequest,
+ VerifyData,
+ LoadBundle,
+ TryAgain,
+ Done,
+ }
+
+ private readonly LoadWebRawBundleOptions _options;
+ private readonly DownloadRetryController _downloadRetryController;
+ private IDownloadBytesRequest _downloadBytesRequest;
+ private IBundleMemoryDecryptor _decryptor;
+ private RawBundle _rawBundle;
+ private ESteps _steps = ESteps.None;
+
+ ///
+ /// 创建网络 RawBundle 加载操作实例
+ ///
+ /// 从网络加载 RawBundle 的操作选项
+ internal LoadWebRawBundleOperation(LoadWebRawBundleOptions options)
+ {
+ _options = options;
+
+ // 注意:网络原因失败后,重新尝试直到成功
+ _downloadRetryController = new DownloadRetryController(int.MaxValue, options.DownloadRetryPolicy);
+ }
+ protected override void InternalStart()
+ {
+ _steps = ESteps.Prepare;
+ }
+ protected override void InternalUpdate()
+ {
+ if (_steps == ESteps.None || _steps == ESteps.Done)
+ return;
+
+ if (_steps == ESteps.Prepare)
+ {
+ if (_options.Bundle.IsEncrypted == false)
+ {
+ _steps = ESteps.DataRequest;
+ }
+ else
+ {
+ var decryptor = _options.RawBundleDecryptor;
+ if (decryptor == null)
+ {
+ _steps = ESteps.Done;
+ SetError($"{_options.CacheName} raw bundle decryptor is null.");
+ return;
+ }
+
+ if (decryptor is IBundleMemoryDecryptor)
+ {
+ _decryptor = decryptor as IBundleMemoryDecryptor;
+ _steps = ESteps.DataRequest;
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ SetError($"{_options.CacheName} does not support '{decryptor.GetType().Name}'.");
+ return;
+ }
+ }
+ }
+
+ if (_steps == ESteps.DataRequest)
+ {
+ string url = _options.DownloadUrlPolicy.SelectUrl(_options.CandidateUrls);
+ var args = new DownloadDataRequestArgs(
+ url: url,
+ timeout: 0,
+ watchdogTimeout: _options.WatchdogTimeout);
+ _downloadBytesRequest = _options.DownloadBackend.CreateBytesRequest(args);
+ _downloadBytesRequest.SendRequest();
+ _steps = ESteps.CheckRequest;
+ }
+
+ if (_steps == ESteps.CheckRequest)
+ {
+ Progress = _downloadBytesRequest.DownloadProgress;
+ if (_downloadBytesRequest.IsDone == false)
+ return;
+
+ if (_downloadBytesRequest.Status == EDownloadRequestStatus.Succeeded)
+ {
+ _options.DownloadUrlPolicy.OnRequestSucceeded(_downloadBytesRequest.Url);
+ _steps = ESteps.VerifyData;
+ }
+ else
+ {
+ string url = _downloadBytesRequest.Url;
+ long httpCode = _downloadBytesRequest.HttpCode;
+ string httpError = _downloadBytesRequest.HttpError;
+ _options.DownloadUrlPolicy.OnRequestFailed(url, httpCode, httpError);
+ if (IsWaitForCompletion == false && _downloadRetryController.CanRetryRequest(url, httpCode, httpError))
+ {
+ _downloadRetryController.StartRetryDelay();
+ _steps = ESteps.TryAgain;
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ SetError(_downloadBytesRequest.Error);
+ YooLogger.LogError(Error);
+ }
+ }
+ }
+
+ if (_steps == ESteps.VerifyData)
+ {
+ // 注意:网络/代理/服务器异常导致内容不完整但请求仍成功
+ EFileVerifyResult verifyResult;
+ if (_options.DownloadVerifyLevel == EFileVerifyLevel.Low || _options.DownloadVerifyLevel == EFileVerifyLevel.Middle)
+ verifyResult = FileVerifyHelper.VerifyFile(_downloadBytesRequest.Result, _options.Bundle.FileSize, 0);
+ else if (_options.DownloadVerifyLevel == EFileVerifyLevel.High)
+ verifyResult = FileVerifyHelper.VerifyFile(_downloadBytesRequest.Result, _options.Bundle.FileSize, _options.Bundle.FileCrc);
+ else
+ throw new YooInternalException($"Unexpected verify level: {_options.DownloadVerifyLevel}.");
+
+ if (verifyResult == EFileVerifyResult.Succeed)
+ {
+ _steps = ESteps.LoadBundle;
+ }
+ else
+ {
+ string error = $"Verify failed. Url: '{_downloadBytesRequest.Url}' Level: {_options.DownloadVerifyLevel} Result: {verifyResult}.";
+ YooLogger.LogWarning(error);
+
+ if (IsWaitForCompletion == false && _downloadRetryController.HasRetriesRemaining())
+ {
+ _downloadRetryController.StartRetryDelay();
+ _steps = ESteps.TryAgain;
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ SetError(error);
+ }
+ }
+ }
+
+ if (_steps == ESteps.LoadBundle)
+ {
+ LoadResult result = LoadFromMemory(_decryptor, _downloadBytesRequest.Result);
+ if (result.Succeeded == false)
+ {
+ _steps = ESteps.Done;
+ SetError(result.Error);
+ return;
+ }
+
+ _steps = ESteps.Done;
+ SetResult();
+ BundleHandle = new RawBundleHandle(_options.Bundle, _rawBundle);
+ }
+
+ if (_steps == ESteps.TryAgain)
+ {
+ // 注意:失败后释放网络请求
+ if (_downloadBytesRequest != null)
+ {
+ _downloadBytesRequest.Dispose();
+ _downloadBytesRequest = null;
+ }
+
+ if (_downloadRetryController.TickRetryDelay())
+ {
+ Progress = 0f;
+ _steps = ESteps.DataRequest;
+ }
+ }
+ }
+ protected override void InternalDispose()
+ {
+ if (_downloadBytesRequest != null)
+ {
+ _downloadBytesRequest.Dispose();
+ _downloadBytesRequest = null;
+ }
+ }
+
+ private LoadResult LoadFromMemory(IBundleMemoryDecryptor decryptor, byte[] fileData)
+ {
+ if (decryptor != null)
+ {
+ var args = new BundleDecryptArgs(_options.Bundle, fileData, null);
+ var binaryData = decryptor.GetDecryptedData(args);
+ if (binaryData == null)
+ return LoadResult.Failure($"{_options.CacheName} decryptor returned null data.");
+
+ _rawBundle = new RawBundle(binaryData);
+ return LoadResult.Default();
+ }
+ else
+ {
+ _rawBundle = new RawBundle(fileData);
+ return LoadResult.Default();
+ }
+ }
+ }
+}
diff --git a/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadWebRawBundleOperation.cs.meta b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadWebRawBundleOperation.cs.meta
new file mode 100644
index 00000000..e8447611
--- /dev/null
+++ b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadWebRawBundleOperation.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b30e1d41b966e63488837244e907363b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadWebRawBundleOptions.cs b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadWebRawBundleOptions.cs
new file mode 100644
index 00000000..2bf9bb4f
--- /dev/null
+++ b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadWebRawBundleOptions.cs
@@ -0,0 +1,70 @@
+using System.Collections.Generic;
+
+namespace YooAsset
+{
+ ///
+ /// 加载 RawBundle 的操作选项
+ ///
+ internal readonly struct LoadWebRawBundleOptions
+ {
+ ///
+ /// 文件缓存名称
+ ///
+ public string CacheName { get; }
+
+ ///
+ /// 资源包描述
+ ///
+ public PackageBundle Bundle { get; }
+
+ ///
+ /// 候选下载地址列表
+ ///
+ public IReadOnlyList CandidateUrls { get; }
+
+ ///
+ /// RawBundle 解密器
+ ///
+ public IBundleDecryptor RawBundleDecryptor { get; }
+
+ ///
+ /// 下载后台接口
+ ///
+ public IDownloadBackend DownloadBackend { get; }
+
+ ///
+ /// 下载数据校验级别
+ ///
+ public EFileVerifyLevel DownloadVerifyLevel { get; }
+
+ ///
+ /// 看门狗超时时间
+ ///
+ public int WatchdogTimeout { get; }
+
+ ///
+ /// 下载重试判定策略
+ ///
+ public IDownloadRetryPolicy DownloadRetryPolicy { get; }
+
+ ///
+ /// URL 选择策略
+ ///
+ public IDownloadUrlPolicy DownloadUrlPolicy { get; }
+
+ public LoadWebRawBundleOptions(string cacheName, PackageBundle bundle, IReadOnlyList candidateUrls,
+ IBundleDecryptor rawBundleDecryptor, IDownloadBackend downloadBackend, EFileVerifyLevel downloadVerifyLevel,
+ int watchdogTimeout, IDownloadRetryPolicy downloadRetryPolicy, IDownloadUrlPolicy downloadUrlPolicy)
+ {
+ CacheName = cacheName;
+ Bundle = bundle;
+ CandidateUrls = candidateUrls;
+ RawBundleDecryptor = rawBundleDecryptor;
+ DownloadBackend = downloadBackend;
+ DownloadVerifyLevel = downloadVerifyLevel;
+ WatchdogTimeout = watchdogTimeout;
+ DownloadRetryPolicy = downloadRetryPolicy;
+ DownloadUrlPolicy = downloadUrlPolicy;
+ }
+ }
+}
diff --git a/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadWebRawBundleOptions.cs.meta b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadWebRawBundleOptions.cs.meta
new file mode 100644
index 00000000..e32f2253
--- /dev/null
+++ b/Assets/YooAsset/Runtime/BundleCache/Operations/Common/LoadWebRawBundleOptions.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c3f863ac69271e243b9270f23c70b02e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/BundleCache/Services/WebGameBundleCache/Operations/WGBCLoadAssetBundleOperation.cs b/Assets/YooAsset/Runtime/BundleCache/Services/WebGameBundleCache/Operations/WGBCLoadAssetBundleOperation.cs
index a26bc16d..1770f976 100644
--- a/Assets/YooAsset/Runtime/BundleCache/Services/WebGameBundleCache/Operations/WGBCLoadAssetBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/BundleCache/Services/WebGameBundleCache/Operations/WGBCLoadAssetBundleOperation.cs
@@ -1,7 +1,7 @@
namespace YooAsset
{
///
- /// WebGL 游戏平台加载 AssetBundle 操作
+ /// 小游戏平台加载 AssetBundle 操作
///
internal sealed class WGBCLoadAssetBundleOperation : BCLoadBundleOperation
{
diff --git a/Assets/YooAsset/Runtime/BundleCache/Services/WebGameBundleCache/Operations/WGBCLoadRawBundleOperation.cs b/Assets/YooAsset/Runtime/BundleCache/Services/WebGameBundleCache/Operations/WGBCLoadRawBundleOperation.cs
new file mode 100644
index 00000000..993a7c1e
--- /dev/null
+++ b/Assets/YooAsset/Runtime/BundleCache/Services/WebGameBundleCache/Operations/WGBCLoadRawBundleOperation.cs
@@ -0,0 +1,85 @@
+namespace YooAsset
+{
+ ///
+ /// 小游戏平台加载 RawBundle 操作
+ ///
+ internal sealed class WGBCLoadRawBundleOperation : BCLoadBundleOperation
+ {
+ private enum ESteps
+ {
+ None,
+ LoadBundle,
+ Done,
+ }
+
+ private readonly WebGameBundleCache _fileCache;
+ private readonly BCLoadBundleOptions _options;
+ private BCLoadBundleOperation _loadBundleOp;
+ private ESteps _steps = ESteps.None;
+
+ internal WGBCLoadRawBundleOperation(WebGameBundleCache fileCache, BCLoadBundleOptions options)
+ {
+ _fileCache = fileCache;
+ _options = options;
+ }
+ protected override void InternalStart()
+ {
+ _steps = ESteps.LoadBundle;
+ }
+ protected override void InternalUpdate()
+ {
+ if (_steps == ESteps.None || _steps == ESteps.Done)
+ return;
+
+ if (_steps == ESteps.LoadBundle)
+ {
+ if (_loadBundleOp == null)
+ {
+ var urls = _fileCache.Config.RemoteService.GetRemoteUrls(_options.Bundle.GetFileName());
+ var options = new LoadWebRawBundleOptions(
+ cacheName: _fileCache.GetType().Name,
+ bundle: _options.Bundle,
+ candidateUrls: urls,
+ rawBundleDecryptor: _fileCache.Config.RawBundleDecryptor,
+ downloadBackend: _fileCache.Config.DownloadBackend,
+ downloadVerifyLevel: _fileCache.Config.DownloadVerifyLevel,
+ watchdogTimeout: _fileCache.Config.WatchdogTimeout,
+ downloadRetryPolicy: _fileCache.Config.DownloadRetryPolicy,
+ downloadUrlPolicy: _fileCache.Config.DownloadUrlPolicy);
+ _loadBundleOp = new LoadWebRawBundleOperation(options);
+ _loadBundleOp.StartOperation();
+ AddChildOperation(_loadBundleOp);
+ }
+
+ _loadBundleOp.UpdateOperation();
+ Progress = _loadBundleOp.Progress;
+ if (_loadBundleOp.IsDone == false)
+ return;
+
+ if (_loadBundleOp.Status == EOperationStatus.Succeeded)
+ {
+ if (_loadBundleOp.BundleHandle == null)
+ throw new YooInternalException("Loaded bundle handle is null.");
+
+ _steps = ESteps.Done;
+ SetResult();
+ BundleHandle = _loadBundleOp.BundleHandle;
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ SetError(_loadBundleOp.Error);
+ }
+ }
+ }
+ protected override void InternalWaitForCompletion()
+ {
+ if (_steps != ESteps.Done)
+ {
+ _steps = ESteps.Done;
+ SetError("WebGL platform does not support synchronous loading.");
+ YooLogger.LogError(Error);
+ }
+ }
+ }
+}
diff --git a/Assets/YooAsset/Runtime/BundleCache/Services/WebGameBundleCache/Operations/WGBCLoadRawBundleOperation.cs.meta b/Assets/YooAsset/Runtime/BundleCache/Services/WebGameBundleCache/Operations/WGBCLoadRawBundleOperation.cs.meta
new file mode 100644
index 00000000..6e188df5
--- /dev/null
+++ b/Assets/YooAsset/Runtime/BundleCache/Services/WebGameBundleCache/Operations/WGBCLoadRawBundleOperation.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4024fa98150c5d4479e93ce88c6c2795
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/BundleCache/Services/WebGameBundleCache/WebGameBundleCache.cs b/Assets/YooAsset/Runtime/BundleCache/Services/WebGameBundleCache/WebGameBundleCache.cs
index a01f945e..fe27e966 100644
--- a/Assets/YooAsset/Runtime/BundleCache/Services/WebGameBundleCache/WebGameBundleCache.cs
+++ b/Assets/YooAsset/Runtime/BundleCache/Services/WebGameBundleCache/WebGameBundleCache.cs
@@ -34,6 +34,11 @@ namespace YooAsset
///
public IBundleDecryptor AssetBundleDecryptor { get; }
+ ///
+ /// RawBundle 解密器
+ ///
+ public IBundleDecryptor RawBundleDecryptor { get; }
+
///
/// 远程服务接口
///
@@ -54,9 +59,8 @@ namespace YooAsset
///
public IDownloadUrlPolicy DownloadUrlPolicy { get; }
- public Configuration(IWebGamePlatform gamePlatform,
- int watchdogTimeout, bool disableUnityWebCache,
- EFileVerifyLevel downloadVerifyLevel, IBundleDecryptor assetBundleDecryptor, IRemoteService remoteService,
+ public Configuration(IWebGamePlatform gamePlatform, int watchdogTimeout, bool disableUnityWebCache,
+ EFileVerifyLevel downloadVerifyLevel, IBundleDecryptor assetBundleDecryptor, IBundleDecryptor rawBundleDecryptor, IRemoteService remoteService,
IDownloadBackend downloadBackend, IDownloadRetryPolicy downloadRetryPolicy, IDownloadUrlPolicy downloadUrlPolicy)
{
GamePlatform = gamePlatform;
@@ -64,6 +68,7 @@ namespace YooAsset
DisableUnityWebCache = disableUnityWebCache;
DownloadVerifyLevel = downloadVerifyLevel;
AssetBundleDecryptor = assetBundleDecryptor;
+ RawBundleDecryptor = rawBundleDecryptor;
RemoteService = remoteService;
DownloadBackend = downloadBackend;
DownloadRetryPolicy = downloadRetryPolicy;
@@ -143,6 +148,11 @@ namespace YooAsset
var operation = new WGBCLoadAssetBundleOperation(this, options);
return operation;
}
+ else if (options.Bundle.GetBundleType() == (int)EBundleType.RawBundle)
+ {
+ var operation = new WGBCLoadRawBundleOperation(this, options);
+ return operation;
+ }
else
{
string error = $"{nameof(WebGameBundleCache)} does not support bundle type: {options.Bundle.GetBundleType()}.";
diff --git a/Assets/YooAsset/Runtime/FileSystem/Services/WebGameFileSystem/WebGameFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/Services/WebGameFileSystem/WebGameFileSystem.cs
index 381b87b7..a8d07b16 100644
--- a/Assets/YooAsset/Runtime/FileSystem/Services/WebGameFileSystem/WebGameFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/Services/WebGameFileSystem/WebGameFileSystem.cs
@@ -55,6 +55,11 @@ namespace YooAsset
///
public IBundleDecryptor AssetBundleDecryptor { get; private set; }
+ ///
+ /// 自定义参数:RawBundle 解密器
+ ///
+ public IBundleDecryptor RawBundleDecryptor { get; private set; }
+
///
/// 自定义参数:资源清单解密器
///
@@ -142,6 +147,10 @@ namespace YooAsset
{
AssetBundleDecryptor = FileSystemHelper.CastParameter(paramName, value);
}
+ else if (paramName == nameof(EFileSystemParameter.RawbundleDecryptor))
+ {
+ RawBundleDecryptor = FileSystemHelper.CastParameter(paramName, value);
+ }
else if (paramName == nameof(EFileSystemParameter.ManifestDecryptor))
{
ManifestDecryptor = FileSystemHelper.CastParameter(paramName, value);
@@ -189,6 +198,7 @@ namespace YooAsset
disableUnityWebCache: DisableUnityWebCache,
downloadVerifyLevel: DownloadVerifyLevel,
assetBundleDecryptor: AssetBundleDecryptor,
+ rawBundleDecryptor: RawBundleDecryptor,
remoteService: RemoteService,
downloadBackend: DownloadBackend,
downloadRetryPolicy: DownloadRetryPolicy,
diff --git a/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs b/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs
index 7bfd285c..80407453 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs
@@ -58,7 +58,7 @@ namespace YooAsset
///
/// 初始化
///
- /// 初始化配置选项
+ /// 初始化操作选项
/// 文件系统宿主
public void Initialize(InitializePackageOptions options, FileSystemHost host)
{
diff --git a/Assets/YooAsset/Samples~/Mini Game/Runtime/AlipayFileSystem/AlipayFileSystem.cs b/Assets/YooAsset/Samples~/Mini Game/Runtime/AlipayFileSystem/AlipayFileSystem.cs
index 72ccde57..0f32aaaf 100644
--- a/Assets/YooAsset/Samples~/Mini Game/Runtime/AlipayFileSystem/AlipayFileSystem.cs
+++ b/Assets/YooAsset/Samples~/Mini Game/Runtime/AlipayFileSystem/AlipayFileSystem.cs
@@ -11,12 +11,21 @@ public static class AlipayFileSystemCreater
fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
return fileSystemParams;
}
- public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor decryptor)
+ public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor assetBundleDecryptor)
{
string fileSystemClass = $"{nameof(AlipayFileSystem)},YooAsset.MiniGame";
var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
- fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, decryptor);
+ fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, assetBundleDecryptor);
+ return fileSystemParams;
+ }
+ public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor assetBundleDecryptor, IBundleDecryptor rawBundleDecryptor)
+ {
+ string fileSystemClass = $"{nameof(AlipayFileSystem)},YooAsset.MiniGame";
+ var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
+ fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
+ fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, assetBundleDecryptor);
+ fileSystemParams.AddParameter(EFileSystemParameter.RawbundleDecryptor, rawBundleDecryptor);
return fileSystemParams;
}
}
diff --git a/Assets/YooAsset/Samples~/Mini Game/Runtime/KuaiShouFileSystem/KuaiShouFileSystem.cs b/Assets/YooAsset/Samples~/Mini Game/Runtime/KuaiShouFileSystem/KuaiShouFileSystem.cs
index aefcbfa8..ba2768a0 100644
--- a/Assets/YooAsset/Samples~/Mini Game/Runtime/KuaiShouFileSystem/KuaiShouFileSystem.cs
+++ b/Assets/YooAsset/Samples~/Mini Game/Runtime/KuaiShouFileSystem/KuaiShouFileSystem.cs
@@ -10,12 +10,21 @@ public static class KuaiShouFileSystemCreater
fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
return fileSystemParams;
}
- public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor decryptor)
+ public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor assetBundleDecryptor)
{
string fileSystemClass = $"{nameof(KuaiShouFileSystem)},YooAsset.MiniGame";
var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
- fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, decryptor);
+ fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, assetBundleDecryptor);
+ return fileSystemParams;
+ }
+ public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor assetBundleDecryptor, IBundleDecryptor rawBundleDecryptor)
+ {
+ string fileSystemClass = $"{nameof(KuaiShouFileSystem)},YooAsset.MiniGame";
+ var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
+ fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
+ fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, assetBundleDecryptor);
+ fileSystemParams.AddParameter(EFileSystemParameter.RawbundleDecryptor, rawBundleDecryptor);
return fileSystemParams;
}
}
diff --git a/Assets/YooAsset/Samples~/Mini Game/Runtime/OppoFileSystem/OppoFileSystem.cs b/Assets/YooAsset/Samples~/Mini Game/Runtime/OppoFileSystem/OppoFileSystem.cs
index ca790b2b..b7310190 100644
--- a/Assets/YooAsset/Samples~/Mini Game/Runtime/OppoFileSystem/OppoFileSystem.cs
+++ b/Assets/YooAsset/Samples~/Mini Game/Runtime/OppoFileSystem/OppoFileSystem.cs
@@ -10,12 +10,21 @@ public static class OppoFileSystemCreater
fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
return fileSystemParams;
}
- public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor decryptor)
+ public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor assetBundleDecryptor)
{
string fileSystemClass = $"{nameof(OppoFileSystem)},YooAsset.MiniGame";
var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
- fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, decryptor);
+ fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, assetBundleDecryptor);
+ return fileSystemParams;
+ }
+ public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor assetBundleDecryptor, IBundleDecryptor rawBundleDecryptor)
+ {
+ string fileSystemClass = $"{nameof(OppoFileSystem)},YooAsset.MiniGame";
+ var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
+ fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
+ fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, assetBundleDecryptor);
+ fileSystemParams.AddParameter(EFileSystemParameter.RawbundleDecryptor, rawBundleDecryptor);
return fileSystemParams;
}
}
diff --git a/Assets/YooAsset/Samples~/Mini Game/Runtime/TaptapFileSystem/TaptapFileSystem.cs b/Assets/YooAsset/Samples~/Mini Game/Runtime/TaptapFileSystem/TaptapFileSystem.cs
index ccb771fa..e1019beb 100644
--- a/Assets/YooAsset/Samples~/Mini Game/Runtime/TaptapFileSystem/TaptapFileSystem.cs
+++ b/Assets/YooAsset/Samples~/Mini Game/Runtime/TaptapFileSystem/TaptapFileSystem.cs
@@ -11,12 +11,21 @@ public static class TaptapFileSystemCreater
fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
return fileSystemParams;
}
- public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor decryptor)
+ public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor assetBundleDecryptor)
{
string fileSystemClass = $"{nameof(TaptapFileSystem)},YooAsset.MiniGame";
var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
- fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, decryptor);
+ fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, assetBundleDecryptor);
+ return fileSystemParams;
+ }
+ public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor assetBundleDecryptor, IBundleDecryptor rawBundleDecryptor)
+ {
+ string fileSystemClass = $"{nameof(TaptapFileSystem)},YooAsset.MiniGame";
+ var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
+ fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
+ fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, assetBundleDecryptor);
+ fileSystemParams.AddParameter(EFileSystemParameter.RawbundleDecryptor, rawBundleDecryptor);
return fileSystemParams;
}
}
diff --git a/Assets/YooAsset/Samples~/Mini Game/Runtime/TiktokFileSystem/TiktokFileSystem.cs b/Assets/YooAsset/Samples~/Mini Game/Runtime/TiktokFileSystem/TiktokFileSystem.cs
index d5bcc58f..8eaf6624 100644
--- a/Assets/YooAsset/Samples~/Mini Game/Runtime/TiktokFileSystem/TiktokFileSystem.cs
+++ b/Assets/YooAsset/Samples~/Mini Game/Runtime/TiktokFileSystem/TiktokFileSystem.cs
@@ -10,12 +10,21 @@ public static class TiktokFileSystemCreater
fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
return fileSystemParams;
}
- public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor decryptor)
+ public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor assetBundleDecryptor)
{
string fileSystemClass = $"{nameof(TiktokFileSystem)},YooAsset.MiniGame";
var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
- fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, decryptor);
+ fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, assetBundleDecryptor);
+ return fileSystemParams;
+ }
+ public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor assetBundleDecryptor, IBundleDecryptor rawBundleDecryptor)
+ {
+ string fileSystemClass = $"{nameof(TiktokFileSystem)},YooAsset.MiniGame";
+ var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
+ fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
+ fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, assetBundleDecryptor);
+ fileSystemParams.AddParameter(EFileSystemParameter.RawbundleDecryptor, rawBundleDecryptor);
return fileSystemParams;
}
}
diff --git a/Assets/YooAsset/Samples~/Mini Game/Runtime/VivoFileSystem/VivoFileSystem.cs b/Assets/YooAsset/Samples~/Mini Game/Runtime/VivoFileSystem/VivoFileSystem.cs
index fdeeb6cd..55a5e18d 100644
--- a/Assets/YooAsset/Samples~/Mini Game/Runtime/VivoFileSystem/VivoFileSystem.cs
+++ b/Assets/YooAsset/Samples~/Mini Game/Runtime/VivoFileSystem/VivoFileSystem.cs
@@ -10,12 +10,21 @@ public static class VivoFileSystemCreater
fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
return fileSystemParams;
}
- public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor decryptor)
+ public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor assetBundleDecryptor)
{
string fileSystemClass = $"{nameof(VivoFileSystem)},YooAsset.MiniGame";
var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
- fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, decryptor);
+ fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, assetBundleDecryptor);
+ return fileSystemParams;
+ }
+ public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor assetBundleDecryptor, IBundleDecryptor rawBundleDecryptor)
+ {
+ string fileSystemClass = $"{nameof(VivoFileSystem)},YooAsset.MiniGame";
+ var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
+ fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
+ fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, assetBundleDecryptor);
+ fileSystemParams.AddParameter(EFileSystemParameter.RawbundleDecryptor, rawBundleDecryptor);
return fileSystemParams;
}
}
diff --git a/Assets/YooAsset/Samples~/Mini Game/Runtime/WechatFileSystem/WechatFileSystem.cs b/Assets/YooAsset/Samples~/Mini Game/Runtime/WechatFileSystem/WechatFileSystem.cs
index 2b23c71c..d67b4975 100644
--- a/Assets/YooAsset/Samples~/Mini Game/Runtime/WechatFileSystem/WechatFileSystem.cs
+++ b/Assets/YooAsset/Samples~/Mini Game/Runtime/WechatFileSystem/WechatFileSystem.cs
@@ -11,12 +11,21 @@ public static class WechatFileSystemCreater
fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
return fileSystemParams;
}
- public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor decryptor)
+ public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor assetBundleDecryptor)
{
string fileSystemClass = $"{nameof(WechatFileSystem)},YooAsset.MiniGame";
var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
- fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, decryptor);
+ fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, assetBundleDecryptor);
+ return fileSystemParams;
+ }
+ public static FileSystemParameters CreateFileSystemParameters(string packageRoot, IRemoteService remoteService, IBundleDecryptor assetBundleDecryptor, IBundleDecryptor rawBundleDecryptor)
+ {
+ string fileSystemClass = $"{nameof(WechatFileSystem)},YooAsset.MiniGame";
+ var fileSystemParams = new FileSystemParameters(fileSystemClass, packageRoot);
+ fileSystemParams.AddParameter(EFileSystemParameter.RemoteService, remoteService);
+ fileSystemParams.AddParameter(EFileSystemParameter.AssetbundleDecryptor, assetBundleDecryptor);
+ fileSystemParams.AddParameter(EFileSystemParameter.RawbundleDecryptor, rawBundleDecryptor);
return fileSystemParams;
}
}