From 329cae1441eab522ed3ba54bf82034342fba731f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= Date: Wed, 14 Jan 2026 19:26:40 +0800 Subject: [PATCH] =?UTF-8?q?refactor=20:=20=E9=87=8D=E6=9E=84=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E5=8C=85=E8=A3=B9=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DefaultBuildinFileSystem.cs | 12 +- .../DefaultCacheFileSystem.cs | 8 +- .../DefaultEditorFileSystem.cs | 12 +- .../DefaultWebRemoteFileSystem.cs | 8 +- .../DefaultWebServerFileSystem.cs | 8 +- .../FileSystem/Interface/IFileSystem.cs | 14 +- .../Operation/FSClearCacheFilesOperation.cs | 13 - .../Operation/UnloadAllAssetsOperation.cs | 21 -- .../Operation/UnloadAllAssetsOptions.cs | 22 ++ .../Operation/UnloadAllAssetsOptions.cs.meta | 11 + .../ResourceManager/ResourceManager.cs | 8 +- .../Runtime/ResourcePackage/EPlayMode.cs | 34 +++ .../Runtime/ResourcePackage/EPlayMode.cs.meta | 11 + .../ResourcePackage/Interface/IPlayMode.cs | 14 +- .../Operation/ClearCacheFilesOptions.cs | 32 ++ .../Operation/ClearCacheFilesOptions.cs.meta | 11 + ...peration.cs => DestroyPackageOperation.cs} | 6 +- ...s.meta => DestroyPackageOperation.cs.meta} | 0 .../Operation/InitializePackageOperation.cs | 192 ++++++++++++ .../InitializePackageOperation.cs.meta | 11 + .../Operation/InitializePackageOptions.cs} | 43 +-- .../InitializePackageOptions.cs.meta} | 0 .../InitializeFileSystemOperation.cs} | 23 +- .../InitializeFileSystemOperation.cs.meta} | 0 ...ion.cs => LoadPackageManifestOperation.cs} | 18 +- ...a => LoadPackageManifestOperation.cs.meta} | 0 .../Operation/LoadPackageManifestOptions.cs | 22 ++ .../LoadPackageManifestOptions.cs.meta | 11 + .../Operation/PreDownloadContentOperation.cs | 14 +- .../Operation/PreDownloadContentOptions.cs | 22 ++ .../PreDownloadContentOptions.cs.meta | 11 + .../RequestPackageVersionOperation.cs | 10 +- .../Operation/RequestPackageVersionOptions.cs | 22 ++ .../RequestPackageVersionOptions.cs.meta | 11 + .../ResourcePackage/PlayMode/PlayModeImpl.cs | 24 +- .../ResourcePackage/ResourcePackage.cs | 276 ++++++------------ Assets/YooAsset/Runtime/YooAssets.cs | 2 +- 37 files changed, 590 insertions(+), 367 deletions(-) create mode 100644 Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadAllAssetsOptions.cs create mode 100644 Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadAllAssetsOptions.cs.meta create mode 100644 Assets/YooAsset/Runtime/ResourcePackage/EPlayMode.cs create mode 100644 Assets/YooAsset/Runtime/ResourcePackage/EPlayMode.cs.meta create mode 100644 Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearCacheFilesOptions.cs create mode 100644 Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearCacheFilesOptions.cs.meta rename Assets/YooAsset/Runtime/ResourcePackage/Operation/{DestroyOperation.cs => DestroyPackageOperation.cs} (94%) rename Assets/YooAsset/Runtime/ResourcePackage/Operation/{DestroyOperation.cs.meta => DestroyPackageOperation.cs.meta} (100%) create mode 100644 Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializePackageOperation.cs create mode 100644 Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializePackageOperation.cs.meta rename Assets/YooAsset/Runtime/{InitializeParameters.cs => ResourcePackage/Operation/InitializePackageOptions.cs} (64%) rename Assets/YooAsset/Runtime/{InitializeParameters.cs.meta => ResourcePackage/Operation/InitializePackageOptions.cs.meta} (100%) rename Assets/YooAsset/Runtime/ResourcePackage/Operation/{InitializationOperation.cs => Internal/InitializeFileSystemOperation.cs} (83%) rename Assets/YooAsset/Runtime/ResourcePackage/Operation/{InitializationOperation.cs.meta => Internal/InitializeFileSystemOperation.cs.meta} (100%) rename Assets/YooAsset/Runtime/ResourcePackage/Operation/{UpdatePackageManifestOperation.cs => LoadPackageManifestOperation.cs} (82%) rename Assets/YooAsset/Runtime/ResourcePackage/Operation/{UpdatePackageManifestOperation.cs.meta => LoadPackageManifestOperation.cs.meta} (100%) create mode 100644 Assets/YooAsset/Runtime/ResourcePackage/Operation/LoadPackageManifestOptions.cs create mode 100644 Assets/YooAsset/Runtime/ResourcePackage/Operation/LoadPackageManifestOptions.cs.meta create mode 100644 Assets/YooAsset/Runtime/ResourcePackage/Operation/PreDownloadContentOptions.cs create mode 100644 Assets/YooAsset/Runtime/ResourcePackage/Operation/PreDownloadContentOptions.cs.meta create mode 100644 Assets/YooAsset/Runtime/ResourcePackage/Operation/RequestPackageVersionOptions.cs create mode 100644 Assets/YooAsset/Runtime/ResourcePackage/Operation/RequestPackageVersionOptions.cs.meta diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs index 9e339af6..ed351652 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs @@ -129,16 +129,16 @@ namespace YooAsset var operation = new DBFSInitializeOperation(this); return operation; } - public virtual FSLoadPackageManifestOperation LoadPackageManifestAsync(string packageVersion, int timeout) - { - var operation = new DBFSLoadPackageManifestOperation(this, packageVersion); - return operation; - } - public virtual FSRequestPackageVersionOperation RequestPackageVersionAsync(bool appendTimeTicks, int timeout) + public virtual FSRequestPackageVersionOperation RequestPackageVersionAsync(RequestPackageVersionOptions options) { var operation = new DBFSRequestPackageVersionOperation(this); return operation; } + public virtual FSLoadPackageManifestOperation LoadPackageManifestAsync(LoadPackageManifestOptions options) + { + var operation = new DBFSLoadPackageManifestOperation(this, options.PackageVersion); + return operation; + } public virtual FSClearCacheFilesOperation ClearCacheFilesAsync(PackageManifest manifest, ClearCacheFilesOptions options) { return _unpackFileSystem.ClearCacheFilesAsync(manifest, options); diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs index 849abfe0..7942406a 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/DefaultCacheFileSystem.cs @@ -151,14 +151,14 @@ namespace YooAsset var operation = new DCFSInitializeOperation(this); return operation; } - public virtual FSLoadPackageManifestOperation LoadPackageManifestAsync(string packageVersion, int timeout) + public virtual FSRequestPackageVersionOperation RequestPackageVersionAsync(RequestPackageVersionOptions options) { - var operation = new DCFSLoadPackageManifestOperation(this, packageVersion, timeout); + var operation = new DCFSRequestPackageVersionOperation(this, options.AppendTimeTicks, options.Timeout); return operation; } - public virtual FSRequestPackageVersionOperation RequestPackageVersionAsync(bool appendTimeTicks, int timeout) + public virtual FSLoadPackageManifestOperation LoadPackageManifestAsync(LoadPackageManifestOptions options) { - var operation = new DCFSRequestPackageVersionOperation(this, appendTimeTicks, timeout); + var operation = new DCFSLoadPackageManifestOperation(this, options.PackageVersion, options.Timeout); return operation; } public virtual FSClearCacheFilesOperation ClearCacheFilesAsync(PackageManifest manifest, ClearCacheFilesOptions options) diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultEditorFileSystem/DefaultEditorFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultEditorFileSystem/DefaultEditorFileSystem.cs index 0412d547..36e86631 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultEditorFileSystem/DefaultEditorFileSystem.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultEditorFileSystem/DefaultEditorFileSystem.cs @@ -83,16 +83,16 @@ namespace YooAsset var operation = new DEFSInitializeOperation(this); return operation; } - public virtual FSLoadPackageManifestOperation LoadPackageManifestAsync(string packageVersion, int timeout) - { - var operation = new DEFSLoadPackageManifestOperation(this, packageVersion); - return operation; - } - public virtual FSRequestPackageVersionOperation RequestPackageVersionAsync(bool appendTimeTicks, int timeout) + public virtual FSRequestPackageVersionOperation RequestPackageVersionAsync(RequestPackageVersionOptions options) { var operation = new DEFSRequestPackageVersionOperation(this); return operation; } + public virtual FSLoadPackageManifestOperation LoadPackageManifestAsync(LoadPackageManifestOptions options) + { + var operation = new DEFSLoadPackageManifestOperation(this, options.PackageVersion); + return operation; + } public virtual FSClearCacheFilesOperation ClearCacheFilesAsync(PackageManifest manifest, ClearCacheFilesOptions options) { var operation = new FSClearCacheFilesCompleteOperation(); diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/DefaultWebRemoteFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/DefaultWebRemoteFileSystem.cs index cfa668b9..402b93bb 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/DefaultWebRemoteFileSystem.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultWebRemoteFileSystem/DefaultWebRemoteFileSystem.cs @@ -78,14 +78,14 @@ namespace YooAsset var operation = new DWRFSInitializeOperation(this); return operation; } - public virtual FSLoadPackageManifestOperation LoadPackageManifestAsync(string packageVersion, int timeout) + public virtual FSRequestPackageVersionOperation RequestPackageVersionAsync(RequestPackageVersionOptions options) { - var operation = new DWRFSLoadPackageManifestOperation(this, packageVersion, timeout); + var operation = new DWRFSRequestPackageVersionOperation(this, options.AppendTimeTicks, options.Timeout); return operation; } - public virtual FSRequestPackageVersionOperation RequestPackageVersionAsync(bool appendTimeTicks, int timeout) + public virtual FSLoadPackageManifestOperation LoadPackageManifestAsync(LoadPackageManifestOptions options) { - var operation = new DWRFSRequestPackageVersionOperation(this, appendTimeTicks, timeout); + var operation = new DWRFSLoadPackageManifestOperation(this, options.PackageVersion, options.Timeout); return operation; } public virtual FSClearCacheFilesOperation ClearCacheFilesAsync(PackageManifest manifest, ClearCacheFilesOptions options) diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs index 8b0af887..62985b19 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs @@ -87,14 +87,14 @@ namespace YooAsset var operation = new DWSFSInitializeOperation(this); return operation; } - public virtual FSLoadPackageManifestOperation LoadPackageManifestAsync(string packageVersion, int timeout) + public virtual FSRequestPackageVersionOperation RequestPackageVersionAsync(RequestPackageVersionOptions options) { - var operation = new DWSFSLoadPackageManifestOperation(this, packageVersion, timeout); + var operation = new DWSFSRequestPackageVersionOperation(this, options.Timeout); return operation; } - public virtual FSRequestPackageVersionOperation RequestPackageVersionAsync(bool appendTimeTicks, int timeout) + public virtual FSLoadPackageManifestOperation LoadPackageManifestAsync(LoadPackageManifestOptions options) { - var operation = new DWSFSRequestPackageVersionOperation(this, timeout); + var operation = new DWSFSLoadPackageManifestOperation(this, options.PackageVersion, options.Timeout); return operation; } public virtual FSClearCacheFilesOperation ClearCacheFilesAsync(PackageManifest manifest, ClearCacheFilesOptions options) diff --git a/Assets/YooAsset/Runtime/FileSystem/Interface/IFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/Interface/IFileSystem.cs index fb55c52c..4f491341 100644 --- a/Assets/YooAsset/Runtime/FileSystem/Interface/IFileSystem.cs +++ b/Assets/YooAsset/Runtime/FileSystem/Interface/IFileSystem.cs @@ -24,15 +24,15 @@ namespace YooAsset /// FSInitializeFileSystemOperation InitializeFileSystemAsync(); - /// - /// 加载包裹清单 - /// - FSLoadPackageManifestOperation LoadPackageManifestAsync(string packageVersion, int timeout); - /// /// 查询包裹版本 /// - FSRequestPackageVersionOperation RequestPackageVersionAsync(bool appendTimeTicks, int timeout); + FSRequestPackageVersionOperation RequestPackageVersionAsync(RequestPackageVersionOptions options); + + /// + /// 加载包裹清单 + /// + FSLoadPackageManifestOperation LoadPackageManifestAsync(LoadPackageManifestOptions options); /// /// 清理缓存文件 @@ -43,7 +43,7 @@ namespace YooAsset /// 下载Bundle文件 /// FSDownloadFileOperation DownloadFileAsync(PackageBundle bundle, DownloadFileOptions options); - + /// /// 加载Bundle文件 /// diff --git a/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearCacheFilesOperation.cs b/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearCacheFilesOperation.cs index d78f4e46..6c72accc 100644 --- a/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearCacheFilesOperation.cs +++ b/Assets/YooAsset/Runtime/FileSystem/Operation/FSClearCacheFilesOperation.cs @@ -1,19 +1,6 @@  namespace YooAsset { - internal class ClearCacheFilesOptions - { - /// - /// 清理模式 - /// - public string ClearMode; - - /// - /// 附加参数 - /// - public object ClearParam; - } - internal abstract class FSClearCacheFilesOperation : AsyncOperationBase { } diff --git a/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadAllAssetsOperation.cs b/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadAllAssetsOperation.cs index c5033d92..4d04f73a 100644 --- a/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadAllAssetsOperation.cs +++ b/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadAllAssetsOperation.cs @@ -3,19 +3,6 @@ using UnityEngine; namespace YooAsset { - public sealed class UnloadAllAssetsOptions - { - /// - /// 释放所有资源句柄,防止卸载过程中触发完成回调! - /// - public bool ReleaseAllHandles = false; - - /// - /// 卸载过程中锁定加载操作,防止新的任务请求! - /// - public bool LockLoadOperation = false; - } - public sealed class UnloadAllAssetsOperation : AsyncOperationBase { private enum ESteps @@ -49,14 +36,6 @@ namespace YooAsset if (_steps == ESteps.CheckOptions) { - if (_options == null) - { - _steps = ESteps.Done; - Status = EOperationStatus.Failed; - Error = $"{nameof(UnloadAllAssetsOptions)} is null."; - return; - } - // 设置锁定状态 if (_options.LockLoadOperation) _resManager.LockLoadOperation = true; diff --git a/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadAllAssetsOptions.cs b/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadAllAssetsOptions.cs new file mode 100644 index 00000000..883428f8 --- /dev/null +++ b/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadAllAssetsOptions.cs @@ -0,0 +1,22 @@ + +namespace YooAsset +{ + public struct UnloadAllAssetsOptions + { + /// + /// 释放所有资源句柄,防止卸载过程中触发完成回调! + /// + public bool ReleaseAllHandles { private set; get; } + + /// + /// 卸载过程中锁定加载操作,防止新的任务请求! + /// + public bool LockLoadOperation { private set; get; } + + public UnloadAllAssetsOptions(bool releaseAllHandles, bool lockLoadOperation) + { + ReleaseAllHandles = releaseAllHandles; + LockLoadOperation = lockLoadOperation; + } + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadAllAssetsOptions.cs.meta b/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadAllAssetsOptions.cs.meta new file mode 100644 index 00000000..f16bc5d0 --- /dev/null +++ b/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadAllAssetsOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc733fff9ba8d5747b556fb6cdb2b9e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs b/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs index dd49cc96..f79cefa0 100644 --- a/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs +++ b/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs @@ -44,11 +44,11 @@ namespace YooAsset /// /// 初始化 /// - public void Initialize(InitializeParameters parameters, IBundleQuery bundleServices) + public void Initialize(InitializePackageOptions options, IBundleQuery bundleServices) { - _bundleLoadingMaxConcurrency = parameters.BundleLoadingMaxConcurrency; - AutoUnloadBundleWhenUnused = parameters.AutoUnloadBundleWhenUnused; - WebGLForceSyncLoadAsset = parameters.WebGLForceSyncLoadAsset; + _bundleLoadingMaxConcurrency = options.BundleLoadingMaxConcurrency; + AutoUnloadBundleWhenUnused = options.AutoUnloadBundleWhenUnused; + WebGLForceSyncLoadAsset = options.WebGLForceSyncLoadAsset; _bundleQuery = bundleServices; SceneManager.sceneUnloaded += OnSceneUnloaded; } diff --git a/Assets/YooAsset/Runtime/ResourcePackage/EPlayMode.cs b/Assets/YooAsset/Runtime/ResourcePackage/EPlayMode.cs new file mode 100644 index 00000000..df6dee54 --- /dev/null +++ b/Assets/YooAsset/Runtime/ResourcePackage/EPlayMode.cs @@ -0,0 +1,34 @@ + +namespace YooAsset +{ + /// + /// 运行模式 + /// + public enum EPlayMode + { + /// + /// 编辑器下的模拟模式 + /// + EditorSimulateMode, + + /// + /// 离线运行模式 + /// + OfflinePlayMode, + + /// + /// 联机运行模式 + /// + HostPlayMode, + + /// + /// WebGL运行模式 + /// + WebPlayMode, + + /// + /// 自定义运行模式 + /// + CustomPlayMode, + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/ResourcePackage/EPlayMode.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/EPlayMode.cs.meta new file mode 100644 index 00000000..69838f36 --- /dev/null +++ b/Assets/YooAsset/Runtime/ResourcePackage/EPlayMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c870af6a4c0efe444af84f4c3ba8c2c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Interface/IPlayMode.cs b/Assets/YooAsset/Runtime/ResourcePackage/Interface/IPlayMode.cs index 2e7e9645..7d706e41 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/Interface/IPlayMode.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/Interface/IPlayMode.cs @@ -14,25 +14,25 @@ namespace YooAsset void DestroyFileSystem(); /// - /// 向网络端请求最新的资源版本 + /// 请求最新的资源版本 /// - RequestPackageVersionOperation RequestPackageVersionAsync(bool appendTimeTicks, int timeout); + RequestPackageVersionOperation RequestPackageVersionAsync(RequestPackageVersionOptions options); /// - /// 向网络端请求并更新清单 + /// 请求并加载资源清单 /// - UpdatePackageManifestOperation UpdatePackageManifestAsync(string packageVersion, int timeout); + LoadPackageManifestOperation LoadPackageManifestAsync(LoadPackageManifestOptions options); /// /// 预下载指定版本的包裹内容 /// - PreDownloadContentOperation PreDownloadContentAsync(string packageVersion, int timeout); + PreDownloadContentOperation PreDownloadContentAsync(PreDownloadContentOptions options); /// /// 清理缓存文件 /// ClearCacheFilesOperation ClearCacheFilesAsync(ClearCacheFilesOptions options); - + // 下载相关 ResourceDownloaderOperation CreateResourceDownloaderByAll(int downloadingMaxNumber, int failedTryAgain); ResourceDownloaderOperation CreateResourceDownloaderByTags(string[] tags, int downloadingMaxNumber, int failedTryAgain); @@ -41,7 +41,7 @@ namespace YooAsset // 解压相关 ResourceUnpackerOperation CreateResourceUnpackerByAll(int upackingMaxNumber, int failedTryAgain); ResourceUnpackerOperation CreateResourceUnpackerByTags(string[] tags, int upackingMaxNumber, int failedTryAgain); - + // 导入相关 ResourceImporterOperation CreateResourceImporterByFilePaths(string[] filePaths, int importingMaxNumber, int failedTryAgain); ResourceImporterOperation CreateResourceImporterByFileInfos(ImportFileInfo[] fileInfos, int importingMaxNumber, int failedTryAgain); diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearCacheFilesOptions.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearCacheFilesOptions.cs new file mode 100644 index 00000000..4d8359dd --- /dev/null +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearCacheFilesOptions.cs @@ -0,0 +1,32 @@ + +namespace YooAsset +{ + public struct ClearCacheFilesOptions + { + /// + /// 清理模式 + /// + public string ClearMode { private set; get; } + + /// + /// 附加参数 + /// + public object ClearParam { private set; get; } + + public ClearCacheFilesOptions(EFileClearMode clearMode) + { + ClearMode = clearMode.ToString(); + ClearParam = null; + } + public ClearCacheFilesOptions(EFileClearMode clearMode, object clearParam) + { + ClearMode = clearMode.ToString(); + ClearParam = clearParam; + } + public ClearCacheFilesOptions(string clearMode, object clearParam) + { + ClearMode = clearMode; + ClearParam = clearParam; + } + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearCacheFilesOptions.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearCacheFilesOptions.cs.meta new file mode 100644 index 00000000..a40b9737 --- /dev/null +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/ClearCacheFilesOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4213bf1907101944b88f32ff19367b6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/DestroyOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/DestroyPackageOperation.cs similarity index 94% rename from Assets/YooAsset/Runtime/ResourcePackage/Operation/DestroyOperation.cs rename to Assets/YooAsset/Runtime/ResourcePackage/Operation/DestroyPackageOperation.cs index f251a62e..aff924b8 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/Operation/DestroyOperation.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/DestroyPackageOperation.cs @@ -1,7 +1,7 @@  namespace YooAsset { - public class DestroyOperation : AsyncOperationBase + public class DestroyPackageOperation : AsyncOperationBase { private enum ESteps { @@ -18,7 +18,7 @@ namespace YooAsset private ESteps _steps = ESteps.None; - public DestroyOperation(ResourcePackage resourcePackage, UnloadAllAssetsOptions options) + public DestroyPackageOperation(ResourcePackage resourcePackage, UnloadAllAssetsOptions options) { _resourcePackage = resourcePackage; _options = options; @@ -90,7 +90,7 @@ namespace YooAsset if (_steps == ESteps.DestroyPackage) { // 销毁包裹 - _resourcePackage.DestroyPackage(); + _resourcePackage.InternalDestroy(); // 最后清理该包裹的异步任务 // 注意:对于有线程操作的异步任务,需要保证线程安全释放。 diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/DestroyOperation.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operation/DestroyPackageOperation.cs.meta similarity index 100% rename from Assets/YooAsset/Runtime/ResourcePackage/Operation/DestroyOperation.cs.meta rename to Assets/YooAsset/Runtime/ResourcePackage/Operation/DestroyPackageOperation.cs.meta diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializePackageOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializePackageOperation.cs new file mode 100644 index 00000000..03439945 --- /dev/null +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializePackageOperation.cs @@ -0,0 +1,192 @@ +using System; + +namespace YooAsset +{ + public class InitializePackageOperation : AsyncOperationBase + { + private enum ESteps + { + None, + SetPlayMode, + CheckOptions, + CheckPlatform, + CreateCore, + InitFileSystem, + Done, + } + + private readonly ResourcePackage _package; + private readonly InitializePackageOptions _options; + private PlayModeImpl _playModeImpl; + private InitializeFileSystemOperation _initializeFileSystemOp; + private EPlayMode _playMode; + private ESteps _steps = ESteps.None; + + internal InitializePackageOperation(ResourcePackage package, InitializePackageOptions options) + { + _package = package; + _options = options; + } + internal override void InternalStart() + { + _steps = ESteps.SetPlayMode; + } + internal override void InternalUpdate() + { + if (_steps == ESteps.None || _steps == ESteps.Done) + return; + + if (_steps == ESteps.SetPlayMode) + { + if (_options is EditorSimulateModeOptions) + _playMode = EPlayMode.EditorSimulateMode; + else if (_options is OfflinePlayModeOptions) + _playMode = EPlayMode.OfflinePlayMode; + else if (_options is HostPlayModeOptions) + _playMode = EPlayMode.HostPlayMode; + else if (_options is WebPlayModeOptions) + _playMode = EPlayMode.WebPlayMode; + else if (_options is CustomPlayModeOptions) + _playMode = EPlayMode.CustomPlayMode; + else + throw new NotImplementedException($"{_options.GetType().Name}"); + + _package._playMode = _playMode; + _steps = ESteps.CheckOptions; + } + + if (_steps == ESteps.CheckOptions) + { + // 检测初始化参数 + if (_options.BundleLoadingMaxConcurrency <= 0) + { + _steps = ESteps.Done; + Status = EOperationStatus.Failed; + Error = $"{nameof(_options.BundleLoadingMaxConcurrency)} value must be greater than zero."; + YooLogger.Error(Error); + return; + } + + _steps = ESteps.CheckPlatform; + } + + if (_steps == ESteps.CheckPlatform) + { +#if !UNITY_EDITOR + if (_playMode == EPlayMode.EditorSimulateMode) + { + _steps = ESteps.Done; + Status = EOperationStatus.Failed; + Error = $"Editor simulate mode only support unity editor."; + YooLogger.Error(Error); + return; + } +#endif + +#if UNITY_WEBGL + if (_playMode != EPlayMode.EditorSimulateMode) + { + if (_playMode != EPlayMode.WebPlayMode) + { + _steps = ESteps.Done; + Status = EOperationStatus.Failed; + Error = $"{_playMode} can not support WebGL plateform !"; + YooLogger.Error(Error); + return; + } + } +#endif + +#if !UNITY_WEBGL + if (_playMode != EPlayMode.EditorSimulateMode) + { + if (_playMode == EPlayMode.WebPlayMode) + { + _steps = ESteps.Done; + Status = EOperationStatus.Failed; + Error = $"{nameof(EPlayMode.WebPlayMode)} only support WebGL plateform !"; + YooLogger.Error(Error); + return; + } + } +#endif + + _steps = ESteps.CreateCore; + } + + if (_steps == ESteps.CreateCore) + { + string packageName = _package.PackageName; + var resourceManager = new ResourceManager(packageName); + var playModeImpl = new PlayModeImpl(packageName); + resourceManager.Initialize(_options, playModeImpl); + + _playModeImpl = playModeImpl; + _package._bundleQuery = playModeImpl; + _package._playModeImpl = playModeImpl; + _package._resourceManager = resourceManager; + _steps = ESteps.InitFileSystem; + } + + if (_steps == ESteps.InitFileSystem) + { + if (_initializeFileSystemOp == null) + { + if (_playMode == EPlayMode.EditorSimulateMode) + { + var initializeParameters = _options as EditorSimulateModeOptions; + _initializeFileSystemOp = _playModeImpl.InitializeAsync(initializeParameters.EditorFileSystemParameters); + } + else if (_playMode == EPlayMode.OfflinePlayMode) + { + var initializeParameters = _options as OfflinePlayModeOptions; + _initializeFileSystemOp = _playModeImpl.InitializeAsync(initializeParameters.BuildinFileSystemParameters); + } + else if (_playMode == EPlayMode.HostPlayMode) + { + var initializeParameters = _options as HostPlayModeOptions; + _initializeFileSystemOp = _playModeImpl.InitializeAsync(initializeParameters.BuildinFileSystemParameters, initializeParameters.CacheFileSystemParameters); + } + else if (_playMode == EPlayMode.WebPlayMode) + { + var initializeParameters = _options as WebPlayModeOptions; + _initializeFileSystemOp = _playModeImpl.InitializeAsync(initializeParameters.WebServerFileSystemParameters, initializeParameters.WebRemoteFileSystemParameters); + } + else if (_playMode == EPlayMode.CustomPlayMode) + { + var initializeParameters = _options as CustomPlayModeOptions; + _initializeFileSystemOp = _playModeImpl.InitializeAsync(initializeParameters.FileSystemParameterList); + } + else + { + throw new NotImplementedException(_playMode.ToString()); + } + + _initializeFileSystemOp.StartOperation(); + AddChildOperation(_initializeFileSystemOp); + } + + _initializeFileSystemOp.UpdateOperation(); + if (_initializeFileSystemOp.IsDone == false) + return; + + if (_initializeFileSystemOp.Status == EOperationStatus.Succeed) + { + _steps = ESteps.Done; + Status = EOperationStatus.Succeed; + } + else + { + _steps = ESteps.Done; + Status = EOperationStatus.Failed; + Error = _initializeFileSystemOp.Error; + YooLogger.Error(Error); + } + } + } + internal override string InternalGetDesc() + { + return $"PlayMode : {_playMode}"; + } + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializePackageOperation.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializePackageOperation.cs.meta new file mode 100644 index 00000000..020ffd35 --- /dev/null +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializePackageOperation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ecb6fb1cbab9e0242849d2657f438478 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Runtime/InitializeParameters.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializePackageOptions.cs similarity index 64% rename from Assets/YooAsset/Runtime/InitializeParameters.cs rename to Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializePackageOptions.cs index 387a6b62..b16ba623 100644 --- a/Assets/YooAsset/Runtime/InitializeParameters.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializePackageOptions.cs @@ -2,41 +2,10 @@ namespace YooAsset { - /// - /// 运行模式 - /// - public enum EPlayMode - { - /// - /// 编辑器下的模拟模式 - /// - EditorSimulateMode, - - /// - /// 离线运行模式 - /// - OfflinePlayMode, - - /// - /// 联机运行模式 - /// - HostPlayMode, - - /// - /// WebGL运行模式 - /// - WebPlayMode, - - /// - /// 自定义运行模式 - /// - CustomPlayMode, - } - /// /// 初始化参数 /// - public abstract class InitializeParameters + public abstract class InitializePackageOptions { /// /// 同时加载Bundle文件的最大并发数 @@ -57,7 +26,7 @@ namespace YooAsset /// /// 编辑器下模拟运行模式的初始化参数 /// - public class EditorSimulateModeParameters : InitializeParameters + public class EditorSimulateModeOptions : InitializePackageOptions { public FileSystemParameters EditorFileSystemParameters; } @@ -65,7 +34,7 @@ namespace YooAsset /// /// 离线运行模式的初始化参数 /// - public class OfflinePlayModeParameters : InitializeParameters + public class OfflinePlayModeOptions : InitializePackageOptions { public FileSystemParameters BuildinFileSystemParameters; } @@ -73,7 +42,7 @@ namespace YooAsset /// /// 联机运行模式的初始化参数 /// - public class HostPlayModeParameters : InitializeParameters + public class HostPlayModeOptions : InitializePackageOptions { public FileSystemParameters BuildinFileSystemParameters; public FileSystemParameters CacheFileSystemParameters; @@ -82,7 +51,7 @@ namespace YooAsset /// /// WebGL运行模式的初始化参数 /// - public class WebPlayModeParameters : InitializeParameters + public class WebPlayModeOptions : InitializePackageOptions { public FileSystemParameters WebServerFileSystemParameters; public FileSystemParameters WebRemoteFileSystemParameters; @@ -91,7 +60,7 @@ namespace YooAsset /// /// 自定义运行模式的初始化参数 /// - public class CustomPlayModeParameters : InitializeParameters + public class CustomPlayModeOptions : InitializePackageOptions { /// /// 文件系统初始化参数列表 diff --git a/Assets/YooAsset/Runtime/InitializeParameters.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializePackageOptions.cs.meta similarity index 100% rename from Assets/YooAsset/Runtime/InitializeParameters.cs.meta rename to Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializePackageOptions.cs.meta diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializationOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/InitializeFileSystemOperation.cs similarity index 83% rename from Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializationOperation.cs rename to Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/InitializeFileSystemOperation.cs index 3ba384ed..90e139c7 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializationOperation.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/InitializeFileSystemOperation.cs @@ -3,13 +3,12 @@ using System.Linq; namespace YooAsset { - public class InitializationOperation : AsyncOperationBase + public class InitializeFileSystemOperation : AsyncOperationBase { private enum ESteps { None, Prepare, - ClearOldFileSystem, InitFileSystem, CheckInitResult, Done, @@ -20,8 +19,8 @@ namespace YooAsset private List _cloneList; private FSInitializeFileSystemOperation _initFileSystemOp; private ESteps _steps = ESteps.None; - - internal InitializationOperation(PlayModeImpl impl, List parametersList) + + internal InitializeFileSystemOperation(PlayModeImpl impl, List parametersList) { _impl = impl; _parametersList = parametersList; @@ -57,18 +56,6 @@ namespace YooAsset } _cloneList = _parametersList.ToList(); - _steps = ESteps.ClearOldFileSystem; - } - - if (_steps == ESteps.ClearOldFileSystem) - { - // 注意:初始化失败后可能会残存一些旧的文件系统! - foreach (var fileSystem in _impl.FileSystems) - { - fileSystem.OnDestroy(); - } - - _impl.FileSystems.Clear(); _steps = ESteps.InitFileSystem; } @@ -121,9 +108,5 @@ namespace YooAsset } } } - internal override string InternalGetDesc() - { - return $"PlayMode : {_impl.PlayMode}"; - } } } \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializationOperation.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/InitializeFileSystemOperation.cs.meta similarity index 100% rename from Assets/YooAsset/Runtime/ResourcePackage/Operation/InitializationOperation.cs.meta rename to Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/InitializeFileSystemOperation.cs.meta diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/UpdatePackageManifestOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/LoadPackageManifestOperation.cs similarity index 82% rename from Assets/YooAsset/Runtime/ResourcePackage/Operation/UpdatePackageManifestOperation.cs rename to Assets/YooAsset/Runtime/ResourcePackage/Operation/LoadPackageManifestOperation.cs index 2bfe7770..43924e50 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/Operation/UpdatePackageManifestOperation.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/LoadPackageManifestOperation.cs @@ -1,7 +1,7 @@  namespace YooAsset { - public sealed class UpdatePackageManifestOperation : AsyncOperationBase + public sealed class LoadPackageManifestOperation : AsyncOperationBase { private enum ESteps { @@ -13,16 +13,14 @@ namespace YooAsset } private readonly PlayModeImpl _impl; - private readonly string _packageVersion; - private readonly int _timeout; + private readonly LoadPackageManifestOptions _options; private FSLoadPackageManifestOperation _loadPackageManifestOp; private ESteps _steps = ESteps.None; - internal UpdatePackageManifestOperation(PlayModeImpl impl, string packageVersion, int timeout) + internal LoadPackageManifestOperation(PlayModeImpl impl, LoadPackageManifestOptions options) { _impl = impl; - _packageVersion = packageVersion; - _timeout = timeout; + _options = options; } internal override void InternalStart() { @@ -35,7 +33,7 @@ namespace YooAsset if (_steps == ESteps.CheckParams) { - if (string.IsNullOrEmpty(_packageVersion)) + if (string.IsNullOrEmpty(_options.PackageVersion)) { _steps = ESteps.Done; Status = EOperationStatus.Failed; @@ -50,7 +48,7 @@ namespace YooAsset if (_steps == ESteps.CheckActiveManifest) { // 检测当前激活的清单对象 - if (_impl.ActiveManifest != null && _impl.ActiveManifest.PackageVersion == _packageVersion) + if (_impl.ActiveManifest != null && _impl.ActiveManifest.PackageVersion == _options.PackageVersion) { _steps = ESteps.Done; Status = EOperationStatus.Succeed; @@ -66,7 +64,7 @@ namespace YooAsset if (_loadPackageManifestOp == null) { var mainFileSystem = _impl.GetMainFileSystem(); - _loadPackageManifestOp = mainFileSystem.LoadPackageManifestAsync(_packageVersion, _timeout); + _loadPackageManifestOp = mainFileSystem.LoadPackageManifestAsync(_options); _loadPackageManifestOp.StartOperation(); AddChildOperation(_loadPackageManifestOp); } @@ -91,7 +89,7 @@ namespace YooAsset } internal override string InternalGetDesc() { - return $"PackageVersion : {_packageVersion}"; + return $"PackageVersion : {_options.PackageVersion}"; } } } \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/UpdatePackageManifestOperation.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operation/LoadPackageManifestOperation.cs.meta similarity index 100% rename from Assets/YooAsset/Runtime/ResourcePackage/Operation/UpdatePackageManifestOperation.cs.meta rename to Assets/YooAsset/Runtime/ResourcePackage/Operation/LoadPackageManifestOperation.cs.meta diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/LoadPackageManifestOptions.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/LoadPackageManifestOptions.cs new file mode 100644 index 00000000..358ce23f --- /dev/null +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/LoadPackageManifestOptions.cs @@ -0,0 +1,22 @@ + +namespace YooAsset +{ + public struct LoadPackageManifestOptions + { + /// + /// 包裹版本 + /// + public string PackageVersion { private set; get; } + + /// + /// 超时时间 + /// + public int Timeout { private set; get; } + + public LoadPackageManifestOptions(string packageVersion, int timeout) + { + PackageVersion = packageVersion; + Timeout = timeout; + } + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/LoadPackageManifestOptions.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operation/LoadPackageManifestOptions.cs.meta new file mode 100644 index 00000000..8b8efe21 --- /dev/null +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/LoadPackageManifestOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 02958c7c4e947ae4b95472741e166cb6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/PreDownloadContentOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/PreDownloadContentOperation.cs index 5326a3f5..d03b782c 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/Operation/PreDownloadContentOperation.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/PreDownloadContentOperation.cs @@ -16,18 +16,17 @@ namespace YooAsset } private readonly PlayModeImpl _impl; - private readonly string _packageVersion; + private readonly PreDownloadContentOptions _options; private readonly int _timeout; private FSLoadPackageManifestOperation _loadPackageManifestOp; private PackageManifest _manifest; private ESteps _steps = ESteps.None; - internal PreDownloadContentOperation(PlayModeImpl impl, string packageVersion, int timeout) + internal PreDownloadContentOperation(PlayModeImpl impl, PreDownloadContentOptions options) { _impl = impl; - _packageVersion = packageVersion; - _timeout = timeout; + _options = options; } internal override void InternalStart() { @@ -40,7 +39,7 @@ namespace YooAsset if (_steps == ESteps.CheckParams) { - if (string.IsNullOrEmpty(_packageVersion)) + if (string.IsNullOrEmpty(_options.PackageVersion)) { _steps = ESteps.Done; Status = EOperationStatus.Failed; @@ -56,7 +55,7 @@ namespace YooAsset // 检测当前激活的清单对象 if (_impl.ActiveManifest != null) { - if (_impl.ActiveManifest.PackageVersion == _packageVersion) + if (_impl.ActiveManifest.PackageVersion == _options.PackageVersion) { _manifest = _impl.ActiveManifest; _steps = ESteps.Done; @@ -72,7 +71,8 @@ namespace YooAsset if (_loadPackageManifestOp == null) { var mainFileSystem = _impl.GetMainFileSystem(); - _loadPackageManifestOp = mainFileSystem.LoadPackageManifestAsync(_packageVersion, _timeout); + var options = new LoadPackageManifestOptions(_options.PackageVersion, _options.Timeout); + _loadPackageManifestOp = mainFileSystem.LoadPackageManifestAsync(options); _loadPackageManifestOp.StartOperation(); AddChildOperation(_loadPackageManifestOp); } diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/PreDownloadContentOptions.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/PreDownloadContentOptions.cs new file mode 100644 index 00000000..62308d58 --- /dev/null +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/PreDownloadContentOptions.cs @@ -0,0 +1,22 @@ + +namespace YooAsset +{ + public struct PreDownloadContentOptions + { + /// + /// 预下载的包裹版本 + /// + public string PackageVersion { private set; get; } + + /// + /// 资源清单请求超时时间 + /// + public int Timeout { private set; get; } + + public PreDownloadContentOptions(string packageVersion, int timeout) + { + PackageVersion = packageVersion; + Timeout = timeout; + } + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/PreDownloadContentOptions.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operation/PreDownloadContentOptions.cs.meta new file mode 100644 index 00000000..1fff0445 --- /dev/null +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/PreDownloadContentOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6ccb056c8ca90c49a01cc15aa75a513 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/RequestPackageVersionOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/RequestPackageVersionOperation.cs index adc3cfd3..3761a690 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/Operation/RequestPackageVersionOperation.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/RequestPackageVersionOperation.cs @@ -18,16 +18,14 @@ namespace YooAsset } private readonly PlayModeImpl _impl; - private readonly bool _appendTimeTicks; - private readonly int _timeout; + private readonly RequestPackageVersionOptions _options; private FSRequestPackageVersionOperation _requestPackageVersionOp; private ESteps _steps = ESteps.None; - internal RequestPackageVersionImplOperation(PlayModeImpl impl, bool appendTimeTicks, int timeout) + internal RequestPackageVersionImplOperation(PlayModeImpl impl, RequestPackageVersionOptions options) { _impl = impl; - _appendTimeTicks = appendTimeTicks; - _timeout = timeout; + _options = options; } internal override void InternalStart() { @@ -43,7 +41,7 @@ namespace YooAsset if (_requestPackageVersionOp == null) { var mainFileSystem = _impl.GetMainFileSystem(); - _requestPackageVersionOp = mainFileSystem.RequestPackageVersionAsync(_appendTimeTicks, _timeout); + _requestPackageVersionOp = mainFileSystem.RequestPackageVersionAsync(_options); _requestPackageVersionOp.StartOperation(); AddChildOperation(_requestPackageVersionOp); } diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/RequestPackageVersionOptions.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/RequestPackageVersionOptions.cs new file mode 100644 index 00000000..20a4b857 --- /dev/null +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/RequestPackageVersionOptions.cs @@ -0,0 +1,22 @@ + +namespace YooAsset +{ + public struct RequestPackageVersionOptions + { + /// + /// 在URL末尾添加时间戳 + /// + public bool AppendTimeTicks { private set; get; } + + /// + /// 超时时间 + /// + public int Timeout { private set; get; } + + public RequestPackageVersionOptions(bool appendTimeTicks, int timeout) + { + AppendTimeTicks = appendTimeTicks; + Timeout = timeout; + } + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/RequestPackageVersionOptions.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/Operation/RequestPackageVersionOptions.cs.meta new file mode 100644 index 00000000..a372a02b --- /dev/null +++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/RequestPackageVersionOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e89594016c3fa69499adf8d642490ed6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/PlayModeImpl.cs b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/PlayModeImpl.cs index c14c8f0e..cedaba11 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/PlayModeImpl.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/PlayModeImpl.cs @@ -7,19 +7,17 @@ namespace YooAsset internal class PlayModeImpl : IPlayMode, IBundleQuery { public readonly string PackageName; - public readonly EPlayMode PlayMode; public readonly List FileSystems = new List(10); - public PlayModeImpl(string packageName, EPlayMode playMode) + public PlayModeImpl(string packageName) { PackageName = packageName; - PlayMode = playMode; } /// /// 异步初始化 /// - public InitializationOperation InitializeAsync(FileSystemParameters fileSystemParameter) + public InitializeFileSystemOperation InitializeAsync(FileSystemParameters fileSystemParameter) { var fileSystemParamList = new List(); if (fileSystemParameter != null) @@ -30,7 +28,7 @@ namespace YooAsset /// /// 异步初始化 /// - public InitializationOperation InitializeAsync(FileSystemParameters fileSystemParameterA, FileSystemParameters fileSystemParameterB) + public InitializeFileSystemOperation InitializeAsync(FileSystemParameters fileSystemParameterA, FileSystemParameters fileSystemParameterB) { var fileSystemParamList = new List(); if (fileSystemParameterA != null) @@ -43,9 +41,9 @@ namespace YooAsset /// /// 异步初始化 /// - public InitializationOperation InitializeAsync(List fileSystemParameterList) + public InitializeFileSystemOperation InitializeAsync(List fileSystemParameterList) { - var operation = new InitializationOperation(this, fileSystemParameterList); + var operation = new InitializeFileSystemOperation(this, fileSystemParameterList); return operation; } @@ -70,27 +68,27 @@ namespace YooAsset /// /// 向网络端请求最新的资源版本 /// - RequestPackageVersionOperation IPlayMode.RequestPackageVersionAsync(bool appendTimeTicks, int timeout) + RequestPackageVersionOperation IPlayMode.RequestPackageVersionAsync(RequestPackageVersionOptions options) { - var operation = new RequestPackageVersionImplOperation(this, appendTimeTicks, timeout); + var operation = new RequestPackageVersionImplOperation(this, options); return operation; } /// /// 向网络端请求并更新清单 /// - UpdatePackageManifestOperation IPlayMode.UpdatePackageManifestAsync(string packageVersion, int timeout) + LoadPackageManifestOperation IPlayMode.LoadPackageManifestAsync(LoadPackageManifestOptions options) { - var operation = new UpdatePackageManifestOperation(this, packageVersion, timeout); + var operation = new LoadPackageManifestOperation(this, options); return operation; } /// /// 预下载指定版本的包裹内容 /// - PreDownloadContentOperation IPlayMode.PreDownloadContentAsync(string packageVersion, int timeout) + PreDownloadContentOperation IPlayMode.PreDownloadContentAsync(PreDownloadContentOptions options) { - var operation = new PreDownloadContentOperation(this, packageVersion, timeout); + var operation = new PreDownloadContentOperation(this, options); return operation; } diff --git a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs index d9f0af1f..94a0355c 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs @@ -8,15 +8,11 @@ namespace YooAsset { public class ResourcePackage { - private bool _isInitialize = false; - private string _initializeError = string.Empty; - private EOperationStatus _initializeStatus = EOperationStatus.None; - private EPlayMode _playMode; - - // 管理器 - private ResourceManager _resourceManager; - private IBundleQuery _bundleQuery; - private IPlayMode _playModeImpl; + private InitializePackageOperation _initializeOp; + internal ResourceManager _resourceManager; + internal IBundleQuery _bundleQuery; + internal IPlayMode _playModeImpl; + internal EPlayMode _playMode; /// /// 包裹名 @@ -28,7 +24,12 @@ namespace YooAsset /// public EOperationStatus InitializeStatus { - get { return _initializeStatus; } + get + { + if (_initializeOp == null) + return EOperationStatus.None; + return _initializeOp.Status; + } } /// @@ -52,7 +53,7 @@ namespace YooAsset get { return OperationSystem.GetSchedulerPriority(PackageName); } set { OperationSystem.SetSchedulerPriority(PackageName, value); } } - + internal ResourcePackage(string packageName) { @@ -62,40 +63,10 @@ namespace YooAsset /// /// 销毁资源包裹 /// - internal void DestroyPackage() + internal void InternalDestroy() { - if (_isInitialize) - { - _isInitialize = false; - _initializeError = string.Empty; - _initializeStatus = EOperationStatus.None; - - // 销毁资源管理器 - if (_resourceManager != null) - { - _resourceManager.Destroy(); - _resourceManager = null; - } - - // 销毁文件系统 - if (_playModeImpl != null) - _playModeImpl.DestroyFileSystem(); - - _bundleQuery = null; - _playModeImpl = null; - } - } - - /// - /// 异步初始化 - /// - public InitializationOperation InitializeAsync(InitializeParameters parameters) - { - // 注意:联机平台因为网络原因可能会初始化失败! - ResetInitializeAfterFailed(); - - // 检测初始化参数合法性 - CheckInitializeParameters(parameters); + _initializeOp = null; + _bundleQuery = null; // 销毁资源管理器 if (_resourceManager != null) @@ -104,147 +75,75 @@ namespace YooAsset _resourceManager = null; } - // 创建资源管理器 - _resourceManager = new ResourceManager(PackageName); - var playModeImpl = new PlayModeImpl(PackageName, _playMode); - _bundleQuery = playModeImpl; - _playModeImpl = playModeImpl; - _resourceManager.Initialize(parameters, _bundleQuery); - - // 初始化资源系统 - InitializationOperation initializeOperation; - if (_playMode == EPlayMode.EditorSimulateMode) + // 销毁文件系统 + if (_playModeImpl != null) { - var initializeParameters = parameters as EditorSimulateModeParameters; - initializeOperation = playModeImpl.InitializeAsync(initializeParameters.EditorFileSystemParameters); + _playModeImpl.DestroyFileSystem(); + _playModeImpl = null; } - else if (_playMode == EPlayMode.OfflinePlayMode) - { - var initializeParameters = parameters as OfflinePlayModeParameters; - initializeOperation = playModeImpl.InitializeAsync(initializeParameters.BuildinFileSystemParameters); - } - else if (_playMode == EPlayMode.HostPlayMode) - { - var initializeParameters = parameters as HostPlayModeParameters; - initializeOperation = playModeImpl.InitializeAsync(initializeParameters.BuildinFileSystemParameters, initializeParameters.CacheFileSystemParameters); - } - else if (_playMode == EPlayMode.WebPlayMode) - { - var initializeParameters = parameters as WebPlayModeParameters; - initializeOperation = playModeImpl.InitializeAsync(initializeParameters.WebServerFileSystemParameters, initializeParameters.WebRemoteFileSystemParameters); - } - else if (_playMode == EPlayMode.CustomPlayMode) - { - var initializeParameters = parameters as CustomPlayModeParameters; - initializeOperation = playModeImpl.InitializeAsync(initializeParameters.FileSystemParameterList); - } - else - { - throw new NotImplementedException(); - } - - // 监听初始化结果 - _isInitialize = true; - OperationSystem.StartOperation(PackageName, initializeOperation); - initializeOperation.Completed += InitializeOperation_Completed; - return initializeOperation; - } - private void ResetInitializeAfterFailed() - { - if (_isInitialize && _initializeStatus == EOperationStatus.Failed) - { - _isInitialize = false; - _initializeStatus = EOperationStatus.None; - _initializeError = string.Empty; - } - } - private void CheckInitializeParameters(InitializeParameters parameters) - { - if (_isInitialize) - throw new YooPackageException(PackageName, $"Package '{PackageName}' is already initialized !"); - - if (parameters == null) - throw new YooPackageException(PackageName, $"Initialize parameters cannot be null."); - -#if !UNITY_EDITOR - if (parameters is EditorSimulateModeParameters) - throw new YooPlatformNotSupportedException($"Editor simulate mode only support unity editor."); -#endif - - // 检测初始化参数 - if (parameters.BundleLoadingMaxConcurrency <= 0) - throw new YooPackageException(PackageName, $"{nameof(parameters.BundleLoadingMaxConcurrency)} value must be greater than zero."); - - // 鉴定运行模式 - if (parameters is EditorSimulateModeParameters) - _playMode = EPlayMode.EditorSimulateMode; - else if (parameters is OfflinePlayModeParameters) - _playMode = EPlayMode.OfflinePlayMode; - else if (parameters is HostPlayModeParameters) - _playMode = EPlayMode.HostPlayMode; - else if (parameters is WebPlayModeParameters) - _playMode = EPlayMode.WebPlayMode; - else if (parameters is CustomPlayModeParameters) - _playMode = EPlayMode.CustomPlayMode; - else - throw new NotImplementedException(); - - // 检测运行时平台 - if (_playMode != EPlayMode.EditorSimulateMode) - { -#if UNITY_WEBGL - if (_playMode != EPlayMode.WebPlayMode) - { - throw new YooPlatformNotSupportedException($"{_playMode} can not support WebGL plateform !"); - } -#else - if (_playMode == EPlayMode.WebPlayMode) - { - throw new YooPlatformNotSupportedException($"{nameof(EPlayMode.WebPlayMode)} only support WebGL plateform !"); - } -#endif - } - } - private void InitializeOperation_Completed(AsyncOperationBase op) - { - _initializeStatus = op.Status; - _initializeError = op.Error; - if (_initializeStatus != EOperationStatus.Succeed) - YooLogger.Error(_initializeError); } /// - /// 异步销毁 + /// 异步初始化包裹 /// - public DestroyOperation DestroyAsync() + public InitializePackageOperation InitializePackageAsync(InitializePackageOptions options) { - var options = new UnloadAllAssetsOptions(); - options.ReleaseAllHandles = true; - options.LockLoadOperation = true; - var operation = new DestroyOperation(this, options); + // 注意:联机平台因为网络原因可能会初始化失败! + ResetInitializeAfterFailed(); + + // 检测重复初始化 + if (_initializeOp != null) + throw new YooPackageException(PackageName, $"Package '{PackageName}' is already initialized !"); + + // 开始初始化操作 + _initializeOp = new InitializePackageOperation(this, options); + OperationSystem.StartOperation(PackageName, _initializeOp); + return _initializeOp; + } + private void ResetInitializeAfterFailed() + { + if (InitializeStatus == EOperationStatus.Failed) + { + InternalDestroy(); + } + } + + /// + /// 异步销毁包裹 + /// + public DestroyPackageOperation DestroyPackageAsync() + { + var options = new UnloadAllAssetsOptions(true, true); + var operation = new DestroyPackageOperation(this, options); OperationSystem.StartOperation(OperationSystem.GLOBAL_SCHEDULER_NAME, operation); return operation; } /// /// 请求最新的资源版本 + /// 说明:超时时间默认60秒 /// - /// 在URL末尾添加时间戳 - /// 超时时间(默认值:60秒) - public RequestPackageVersionOperation RequestPackageVersionAsync(bool appendTimeTicks = true, int timeout = 60) + public RequestPackageVersionOperation RequestPackageVersionAsync() + { + var options = new RequestPackageVersionOptions(true, 60); + return RequestPackageVersionAsync(options); + } + + /// + /// 请求最新的资源版本 + /// + public RequestPackageVersionOperation RequestPackageVersionAsync(RequestPackageVersionOptions options) { DebugCheckInitialize(false); - var operation = _playModeImpl.RequestPackageVersionAsync(appendTimeTicks, timeout); + var operation = _playModeImpl.RequestPackageVersionAsync(options); OperationSystem.StartOperation(PackageName, operation); return operation; } /// - /// 更新并加载指定版本的资源清单 + /// 加载指定版本的资源清单 /// - /// 包裹版本 - /// 超时时间(默认值:60秒) - public UpdatePackageManifestOperation UpdatePackageManifestAsync(string packageVersion, int timeout = 60) + public LoadPackageManifestOperation LoadPackageManifestAsync(LoadPackageManifestOptions options) { DebugCheckInitialize(false); @@ -254,7 +153,7 @@ namespace YooAsset YooLogger.Warning($"Found loaded bundle before update manifest ! Recommended to call the {nameof(UnloadAllAssetsAsync)} method to release loaded bundle !"); } - var operation = _playModeImpl.UpdatePackageManifestAsync(packageVersion, timeout); + var operation = _playModeImpl.LoadPackageManifestAsync(options); OperationSystem.StartOperation(PackageName, operation); return operation; } @@ -262,12 +161,10 @@ namespace YooAsset /// /// 预下载指定版本的包裹资源 /// - /// 包裹版本 - /// 资源清单下载的超时时间(默认值:60秒) - public PreDownloadContentOperation PreDownloadContentAsync(string packageVersion, int timeout = 60) + public PreDownloadContentOperation PreDownloadContentAsync(PreDownloadContentOptions options) { DebugCheckInitialize(false); - var operation = _playModeImpl.PreDownloadContentAsync(packageVersion, timeout); + var operation = _playModeImpl.PreDownloadContentAsync(options); OperationSystem.StartOperation(PackageName, operation); return operation; } @@ -275,30 +172,9 @@ namespace YooAsset /// /// 清理缓存文件 /// - /// 清理方式 - /// 执行参数 - public ClearCacheFilesOperation ClearCacheFilesAsync(EFileClearMode clearMode, object clearParam = null) + public ClearCacheFilesOperation ClearCacheFilesAsync(ClearCacheFilesOptions options) { DebugCheckInitialize(false); - ClearCacheFilesOptions options = new ClearCacheFilesOptions(); - options.ClearMode = clearMode.ToString(); - options.ClearParam = clearParam; - var operation = _playModeImpl.ClearCacheFilesAsync(options); - OperationSystem.StartOperation(PackageName, operation); - return operation; - } - - /// - /// 清理缓存文件 - /// - /// 清理方式 - /// 执行参数 - public ClearCacheFilesOperation ClearCacheFilesAsync(string clearMode, object clearParam = null) - { - DebugCheckInitialize(false); - ClearCacheFilesOptions options = new ClearCacheFilesOptions(); - options.ClearMode = clearMode; - options.ClearParam = clearParam; var operation = _playModeImpl.ClearCacheFilesAsync(options); OperationSystem.StartOperation(PackageName, operation); return operation; @@ -1165,10 +1041,22 @@ namespace YooAsset #region 调试方法 private void DebugCheckInitialize(bool checkActiveManifest = true) { - if (_initializeStatus == EOperationStatus.None) - throw new YooPackageException(PackageName, "Package initialize not completed !"); - else if (_initializeStatus == EOperationStatus.Failed) - throw new YooPackageException(PackageName, $"Package initialize failed ! {_initializeError}"); + if (InitializeStatus != EOperationStatus.Succeed) + { + if (InitializeStatus == EOperationStatus.None) + { + throw new YooPackageException(PackageName, "Package not initialize !"); + } + else if (InitializeStatus == EOperationStatus.Processing) + { + throw new YooPackageException(PackageName, "Package initialize not completed !"); + } + else if (InitializeStatus == EOperationStatus.Failed) + { + string error = _initializeOp == null ? string.Empty : _initializeOp.Error; + throw new YooPackageException(PackageName, $"Package initialize failed ! {error}"); + } + } if (checkActiveManifest) { diff --git a/Assets/YooAsset/Runtime/YooAssets.cs b/Assets/YooAsset/Runtime/YooAssets.cs index c4203c22..e17c1b3f 100644 --- a/Assets/YooAsset/Runtime/YooAssets.cs +++ b/Assets/YooAsset/Runtime/YooAssets.cs @@ -183,7 +183,7 @@ namespace YooAsset string packageName = package.PackageName; if (package.InitializeStatus != EOperationStatus.None) { - YooLogger.Error($"The resource package {packageName} has not been destroyed, please call the method {nameof(ResourcePackage.DestroyAsync)} to destroy!"); + YooLogger.Error($"The resource package {packageName} has not been destroyed, please call the method {nameof(ResourcePackage.DestroyPackageAsync)} to destroy!"); return false; }