diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs
index 15d32796..77de987f 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs
@@ -559,6 +559,21 @@ namespace YooAsset
};
return DecryptionServices.LoadAssetBundleAsync(fileInfo);
}
+
+ ///
+ /// 加载加密资源文件
+ ///
+ public DecryptResult LoadEncryptedAssetBundleFallback(PackageBundle bundle)
+ {
+ string filePath = GetCacheBundleFileLoadPath(bundle);
+ var fileInfo = new DecryptFileInfo()
+ {
+ BundleName = bundle.BundleName,
+ FileLoadCRC = bundle.UnityCRC,
+ FileLoadPath = filePath,
+ };
+ return DecryptionServices.LoadAssetBundleFallback(fileInfo);
+ }
#endregion
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/DCFSLoadBundleOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/DCFSLoadBundleOperation.cs
index 2aefef9f..f7cfc967 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/DCFSLoadBundleOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/DCFSLoadBundleOperation.cs
@@ -164,11 +164,23 @@ namespace YooAsset
{
if (_bundle.Encrypted)
{
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = $"Failed to load encrypted asset bundle file : {_bundle.BundleName}";
- YooLogger.Error(Error);
- return;
+ var decryptResult = _fileSystem.LoadEncryptedAssetBundleFallback(_bundle);
+ _assetBundle = decryptResult.Result;
+ if (_assetBundle != null)
+ {
+ _steps = ESteps.Done;
+ Result = new AssetBundleResult(_fileSystem, _bundle, _assetBundle, _managedStream);
+ Status = EOperationStatus.Succeed;
+ return;
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Failed to load encrypted asset bundle file : {_bundle.BundleName}";
+ YooLogger.Error(Error);
+ return;
+ }
}
// 注意:在安卓移动平台,华为和三星真机上有极小概率加载资源包失败。
diff --git a/Assets/YooAsset/Runtime/Services/IDecryptionServices.cs b/Assets/YooAsset/Runtime/Services/IDecryptionServices.cs
index 1e954a3e..2dfeec3c 100644
--- a/Assets/YooAsset/Runtime/Services/IDecryptionServices.cs
+++ b/Assets/YooAsset/Runtime/Services/IDecryptionServices.cs
@@ -51,6 +51,14 @@ namespace YooAsset
///
DecryptResult LoadAssetBundleAsync(DecryptFileInfo fileInfo);
+ ///
+ /// 后备方式获取解密的资源包对象
+ /// 注意:当正常解密方法失败后,会触发后备加载!
+ /// 说明:建议通过LoadFromMemory()方法加载资源对象作为保底机制。
+ /// issues : https://github.com/tuyoogame/YooAsset/issues/562
+ ///
+ DecryptResult LoadAssetBundleFallback(DecryptFileInfo fileInfo);
+
///
/// 获取解密的字节数据
///
diff --git a/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestBundleEncryption.cs b/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestBundleEncryption.cs
index 33993150..760cb6bf 100644
--- a/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestBundleEncryption.cs
+++ b/Assets/YooAsset/Samples~/Test Sample/Runtime/T2_TestBuldinFileSystem/TestBundleEncryption.cs
@@ -147,6 +147,14 @@ public class FileStreamTestDecryption : IDecryptionServices
return decryptResult;
}
+ ///
+ /// 后备方式获取解密的资源包对象
+ ///
+ DecryptResult IDecryptionServices.LoadAssetBundleFallback(DecryptFileInfo fileInfo)
+ {
+ return new DecryptResult();
+ }
+
///
/// 获取解密的字节数据
///
@@ -198,6 +206,14 @@ public class FileOffsetTestDecryption : IDecryptionServices
return decryptResult;
}
+ ///
+ /// 后备方式获取解密的资源包对象
+ ///
+ DecryptResult IDecryptionServices.LoadAssetBundleFallback(DecryptFileInfo fileInfo)
+ {
+ return new DecryptResult();
+ }
+
///
/// 获取解密的字节数据
///