From ddce031ee524b149dfc987384acd546e1c03f559 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 27 Jul 2024 15:25:21 +0800 Subject: [PATCH] =?UTF-8?q?Assetbundle=E5=8A=A0=E8=BD=BD=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=A7=A3=E5=AF=86=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DefaultBuildinFileSystem.cs | 78 +++++++++++++++++-- .../Operation/DBFSLoadBundleOperation.cs | 5 +- .../DefaultCacheFileSystem.cs | 75 ++++++++++++++++-- .../Operation/DCFSLoadBundleOperation.cs | 6 +- .../DefaultWebFileSystem.cs | 2 +- .../YooAsset/Runtime/InitializeParameters.cs | 37 +++++---- 6 files changed, 169 insertions(+), 34 deletions(-) diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs index 1dcfb6c3..5f94d889 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs @@ -98,6 +98,11 @@ namespace YooAsset /// 自定义参数:原生文件构建管线 /// public bool RawFileBuildPipeline { private set; get; } = false; + + /// + /// 自定义参数:解密方法类 + /// + public IDecryptionServices DecryptionServices { private set; get; } #endregion @@ -181,18 +186,22 @@ namespace YooAsset public virtual void SetParameter(string name, object value) { - if (name == "FILE_VERIFY_LEVEL") + if (name == FileSystemParameters.FILE_VERIFY_LEVEL) { FileVerifyLevel = (EFileVerifyLevel)value; } - else if (name == "APPEND_FILE_EXTENSION") + else if (name == FileSystemParameters.APPEND_FILE_EXTENSION) { AppendFileExtension = (bool)value; } - else if (name == "RAW_FILE_BUILD_PIPELINE") + else if (name == FileSystemParameters.RAW_FILE_BUILD_PIPELINE) { RawFileBuildPipeline = (bool)value; } + else if (name == FileSystemParameters.DECRYPTION_SERVICES) + { + DecryptionServices = (IDecryptionServices)value; + } else { YooLogger.Warning($"Invalid parameter : {name}"); @@ -210,10 +219,10 @@ namespace YooAsset // 创建解压文件系统 var remoteServices = new UnpackRemoteServices(_packageRoot); _unpackFileSystem = new DefaultUnpackFileSystem(); - _unpackFileSystem.SetParameter("REMOTE_SERVICES", remoteServices); - _unpackFileSystem.SetParameter("FILE_VERIFY_LEVEL", FileVerifyLevel); - _unpackFileSystem.SetParameter("APPEND_FILE_EXTENSION", AppendFileExtension); - _unpackFileSystem.SetParameter("RAW_FILE_BUILD_PIPELINE", RawFileBuildPipeline); + _unpackFileSystem.SetParameter(FileSystemParameters.REMOTE_SERVICES, remoteServices); + _unpackFileSystem.SetParameter(FileSystemParameters.FILE_VERIFY_LEVEL, FileVerifyLevel); + _unpackFileSystem.SetParameter(FileSystemParameters.APPEND_FILE_EXTENSION, AppendFileExtension); + _unpackFileSystem.SetParameter(FileSystemParameters.RAW_FILE_BUILD_PIPELINE, RawFileBuildPipeline); _unpackFileSystem.OnCreate(packageName, null); } public virtual void OnUpdate() @@ -310,7 +319,60 @@ namespace YooAsset string rootPath = PathUtility.Combine(Application.dataPath, "StreamingAssets", YooAssetSettingsData.Setting.DefaultYooFolderName); return PathUtility.Combine(rootPath, PackageName); } - + public AssetBundle LoadAssetBundle(PackageBundle bundle) + { + string filePath = GetBuildinFileLoadPath(bundle); + + if (bundle.Encrypted) + { + if (DecryptionServices == null) + { + YooLogger.Error($"DecryptionServices is Null!"); + return null; + } + else + { + return DecryptionServices.LoadAssetBundle(new DecryptFileInfo() + { + BundleName = bundle.BundleName, + FileLoadCRC = bundle.UnityCRC, + FileLoadPath = filePath, + }, out _); + } + } + else + { + return AssetBundle.LoadFromFile(filePath); + } + } + + public AssetBundleCreateRequest LoadAssetBundleAsync(PackageBundle bundle) + { + string filePath = GetBuildinFileLoadPath(bundle); + + if (bundle.Encrypted) + { + if (DecryptionServices == null) + { + YooLogger.Error($"DecryptionServices is Empty!"); + return null; + } + else + { + return DecryptionServices.LoadAssetBundleAsync(new DecryptFileInfo() + { + BundleName = bundle.BundleName, + FileLoadCRC = bundle.UnityCRC, + FileLoadPath = filePath, + }, out _); + } + } + else + { + return AssetBundle.LoadFromFileAsync(filePath); + } + } + /// /// 记录文件信息 /// diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/DBFSLoadBundleOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/DBFSLoadBundleOperation.cs index 498e18a7..2276f968 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/DBFSLoadBundleOperation.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/DBFSLoadBundleOperation.cs @@ -41,14 +41,13 @@ namespace YooAsset if (_steps == ESteps.LoadBuidlinAssetBundle) { - string filePath = _fileSystem.GetBuildinFileLoadPath(_bundle); if (_isWaitForAsyncComplete) { - Result = AssetBundle.LoadFromFile(filePath); + Result = _fileSystem.LoadAssetBundle(_bundle); } else { - _createRequest = AssetBundle.LoadFromFileAsync(filePath); + _createRequest = _fileSystem.LoadAssetBundleAsync(_bundle); } _steps = ESteps.CheckLoadBuildinResult; } diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs index b084dfa0..08d3984d 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs @@ -97,6 +97,11 @@ namespace YooAsset /// 自定义参数:断点续传下载器关注的错误码 /// public List ResumeDownloadResponseCodes { private set; get; } = null; + + /// + /// 自定义参数:解密方法类 + /// + public IDecryptionServices DecryptionServices { private set; get; } #endregion @@ -208,30 +213,34 @@ namespace YooAsset public virtual void SetParameter(string name, object value) { - if (name == "REMOTE_SERVICES") + if (name == FileSystemParameters.REMOTE_SERVICES) { RemoteServices = (IRemoteServices)value; } - else if (name == "FILE_VERIFY_LEVEL") + else if (name == FileSystemParameters.FILE_VERIFY_LEVEL) { FileVerifyLevel = (EFileVerifyLevel)value; } - else if (name == "APPEND_FILE_EXTENSION") + else if (name == FileSystemParameters.APPEND_FILE_EXTENSION) { AppendFileExtension = (bool)value; } - else if (name == "RAW_FILE_BUILD_PIPELINE") + else if (name == FileSystemParameters.RAW_FILE_BUILD_PIPELINE) { RawFileBuildPipeline = (bool)value; } - else if (name == "RESUME_DOWNLOAD_MINMUM_SIZE") + else if (name == FileSystemParameters.RESUME_DOWNLOAD_MINMUM_SIZE) { ResumeDownloadMinimumSize = (long)value; } - else if (name == "RESUME_DOWNLOAD_RESPONSE_CODES") + else if (name == FileSystemParameters.RESUME_DOWNLOAD_RESPONSE_CODES) { ResumeDownloadResponseCodes = (List)value; } + else if (name == FileSystemParameters.DECRYPTION_SERVICES) + { + DecryptionServices = (IDecryptionServices)value; + } else { YooLogger.Warning($"Invalid parameter : {name}"); @@ -528,6 +537,60 @@ namespace YooAsset { return _wrappers.Keys.ToList(); } + + internal AssetBundle LoadAssetBundle(PackageBundle bundle) + { + string filePath = GetCacheFileLoadPath(bundle); + + if (bundle.Encrypted) + { + if (DecryptionServices == null) + { + YooLogger.Error($"DecryptionServices is Null!"); + return null; + } + else + { + return DecryptionServices.LoadAssetBundle(new DecryptFileInfo() + { + BundleName = bundle.BundleName, + FileLoadCRC = bundle.UnityCRC, + FileLoadPath = filePath, + }, out _); + } + } + else + { + return AssetBundle.LoadFromFile(filePath); + } + } + + internal AssetBundleCreateRequest LoadAssetBundleAsync(PackageBundle bundle) + { + string filePath = GetCacheFileLoadPath(bundle); + + if (bundle.Encrypted) + { + if (DecryptionServices == null) + { + YooLogger.Error($"DecryptionServices is Empty!"); + return null; + } + else + { + return DecryptionServices.LoadAssetBundleAsync(new DecryptFileInfo() + { + BundleName = bundle.BundleName, + FileLoadCRC = bundle.UnityCRC, + FileLoadPath = filePath, + }, out _); + } + } + else + { + return AssetBundle.LoadFromFileAsync(filePath); + } + } #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 0f4238df..6b610104 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/DCFSLoadBundleOperation.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/DCFSLoadBundleOperation.cs @@ -78,15 +78,15 @@ namespace YooAsset if (_steps == ESteps.LoadAssetBundle) { - string filePath = _fileSystem.GetCacheFileLoadPath(_bundle); if (_isWaitForAsyncComplete) { - Result = AssetBundle.LoadFromFile(filePath); + Result = _fileSystem.LoadAssetBundle(_bundle); } else { - _createRequest = AssetBundle.LoadFromFileAsync(filePath); + _createRequest = _fileSystem.LoadAssetBundleAsync(_bundle); } + _steps = ESteps.CheckResult; } diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebFileSystem/DefaultWebFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebFileSystem/DefaultWebFileSystem.cs index 684984ac..eedbf667 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebFileSystem/DefaultWebFileSystem.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultWebFileSystem/DefaultWebFileSystem.cs @@ -114,7 +114,7 @@ namespace YooAsset public virtual void SetParameter(string name, object value) { - if (name == "DISABLE_UNITY_WEB_CACHE") + if (name == FileSystemParameters.DISABLE_UNITY_WEB_CACHE) { DisableUnityWebCache = (bool)value; } diff --git a/Assets/YooAsset/Runtime/InitializeParameters.cs b/Assets/YooAsset/Runtime/InitializeParameters.cs index 25076f7c..4fed4364 100644 --- a/Assets/YooAsset/Runtime/InitializeParameters.cs +++ b/Assets/YooAsset/Runtime/InitializeParameters.cs @@ -55,6 +55,15 @@ namespace YooAsset /// public class FileSystemParameters { + public const string FILE_VERIFY_LEVEL = "FILE_VERIFY_LEVEL"; + public const string DECRYPTION_SERVICES = "DECRYPTION_SERVICES"; + public const string APPEND_FILE_EXTENSION = "APPEND_FILE_EXTENSION"; + public const string RAW_FILE_BUILD_PIPELINE = "RAW_FILE_BUILD_PIPELINE"; + public const string REMOTE_SERVICES = "REMOTE_SERVICES"; + public const string DISABLE_UNITY_WEB_CACHE = "DISABLE_UNITY_WEB_CACHE"; + public const string RESUME_DOWNLOAD_MINMUM_SIZE = "RESUME_DOWNLOAD_MINMUM_SIZE"; + public const string RESUME_DOWNLOAD_RESPONSE_CODES = "RESUME_DOWNLOAD_RESPONSE_CODES"; + internal Dictionary CreateParameters = new Dictionary(); /// @@ -101,11 +110,12 @@ namespace YooAsset /// /// 缓存文件的校验等级 /// 内置文件的根路径 - public static FileSystemParameters CreateDefaultBuildinFileSystemParameters(EFileVerifyLevel verifyLevel = EFileVerifyLevel.Middle, string rootDirectory = null) + public static FileSystemParameters CreateDefaultBuildinFileSystemParameters(IDecryptionServices decryptionServices = null, EFileVerifyLevel verifyLevel = EFileVerifyLevel.Middle, string rootDirectory = null) { string fileSystemClass = typeof(DefaultBuildinFileSystem).FullName; var fileSystemParams = new FileSystemParameters(fileSystemClass, rootDirectory); - fileSystemParams.AddParameter("FILE_VERIFY_LEVEL", verifyLevel); + fileSystemParams.AddParameter(FILE_VERIFY_LEVEL, verifyLevel); + fileSystemParams.AddParameter(DECRYPTION_SERVICES, decryptionServices); return fileSystemParams; } @@ -118,9 +128,9 @@ namespace YooAsset { string fileSystemClass = typeof(DefaultBuildinFileSystem).FullName; var fileSystemParams = new FileSystemParameters(fileSystemClass, rootDirectory); - fileSystemParams.AddParameter("FILE_VERIFY_LEVEL", verifyLevel); - fileSystemParams.AddParameter("APPEND_FILE_EXTENSION", true); - fileSystemParams.AddParameter("RAW_FILE_BUILD_PIPELINE", true); + fileSystemParams.AddParameter(FILE_VERIFY_LEVEL, verifyLevel); + fileSystemParams.AddParameter(APPEND_FILE_EXTENSION, true); + fileSystemParams.AddParameter(RAW_FILE_BUILD_PIPELINE, true); return fileSystemParams; } @@ -130,12 +140,13 @@ namespace YooAsset /// 远端资源地址查询服务类 /// 缓存文件的校验等级 /// 文件系统的根目录 - public static FileSystemParameters CreateDefaultCacheFileSystemParameters(IRemoteServices remoteServices, EFileVerifyLevel verifyLevel = EFileVerifyLevel.Middle, string rootDirectory = null) + public static FileSystemParameters CreateDefaultCacheFileSystemParameters(IRemoteServices remoteServices, IDecryptionServices decryptionServices = null, EFileVerifyLevel verifyLevel = EFileVerifyLevel.Middle, string rootDirectory = null) { string fileSystemClass = typeof(DefaultCacheFileSystem).FullName; var fileSystemParams = new FileSystemParameters(fileSystemClass, rootDirectory); - fileSystemParams.AddParameter("REMOTE_SERVICES", remoteServices); - fileSystemParams.AddParameter("FILE_VERIFY_LEVEL", verifyLevel); + fileSystemParams.AddParameter(REMOTE_SERVICES, remoteServices); + fileSystemParams.AddParameter(FILE_VERIFY_LEVEL, verifyLevel); + fileSystemParams.AddParameter(DECRYPTION_SERVICES, decryptionServices); return fileSystemParams; } @@ -149,10 +160,10 @@ namespace YooAsset { string fileSystemClass = typeof(DefaultCacheFileSystem).FullName; var fileSystemParams = new FileSystemParameters(fileSystemClass, rootDirectory); - fileSystemParams.AddParameter("REMOTE_SERVICES", remoteServices); - fileSystemParams.AddParameter("FILE_VERIFY_LEVEL", verifyLevel); - fileSystemParams.AddParameter("APPEND_FILE_EXTENSION", true); - fileSystemParams.AddParameter("RAW_FILE_BUILD_PIPELINE", true); + fileSystemParams.AddParameter(REMOTE_SERVICES, remoteServices); + fileSystemParams.AddParameter(FILE_VERIFY_LEVEL, verifyLevel); + fileSystemParams.AddParameter(APPEND_FILE_EXTENSION, true); + fileSystemParams.AddParameter(RAW_FILE_BUILD_PIPELINE, true); return fileSystemParams; } @@ -164,7 +175,7 @@ namespace YooAsset { string fileSystemClass = typeof(DefaultWebFileSystem).FullName; var fileSystemParams = new FileSystemParameters(fileSystemClass, null); - fileSystemParams.AddParameter("DISABLE_UNITY_WEB_CACHE", disableUnityWebCache); + fileSystemParams.AddParameter(DISABLE_UNITY_WEB_CACHE, disableUnityWebCache); return fileSystemParams; } }