diff --git a/Assets/YooAsset/Runtime/InitializeParameters.cs b/Assets/YooAsset/Runtime/InitializeParameters.cs
index 00b690e5..c56579f1 100644
--- a/Assets/YooAsset/Runtime/InitializeParameters.cs
+++ b/Assets/YooAsset/Runtime/InitializeParameters.cs
@@ -90,23 +90,6 @@ namespace YooAsset
return fileSystemParams;
}
- ///
- /// 创建默认的内置文件系统参数(原生文件)
- ///
- /// 加密文件解密服务类
- /// 缓存文件的校验等级
- /// 内置文件的根路径
- public static FileSystemParameters CreateDefaultBuildinRawFileSystemParameters(IDecryptionServices decryptionServices = null, EFileVerifyLevel verifyLevel = EFileVerifyLevel.Middle, string rootDirectory = null)
- {
- string fileSystemClass = typeof(DefaultBuildinFileSystem).FullName;
- var fileSystemParams = new FileSystemParameters(fileSystemClass, rootDirectory);
- fileSystemParams.AddParameter(FileSystemParametersDefine.DECRYPTION_SERVICES, decryptionServices);
- fileSystemParams.AddParameter(FileSystemParametersDefine.FILE_VERIFY_LEVEL, verifyLevel);
- fileSystemParams.AddParameter(FileSystemParametersDefine.APPEND_FILE_EXTENSION, true);
- fileSystemParams.AddParameter(FileSystemParametersDefine.RAW_FILE_BUILD_PIPELINE, true);
- return fileSystemParams;
- }
-
///
/// 创建默认的缓存文件系统参数
///
@@ -124,25 +107,6 @@ namespace YooAsset
return fileSystemParams;
}
- ///
- /// 创建默认的缓存文件系统参数(原生文件)
- ///
- /// 远端资源地址查询服务类
- /// 加密文件解密服务类
- /// 缓存文件的校验等级
- /// 文件系统的根目录
- public static FileSystemParameters CreateDefaultCacheRawFileSystemParameters(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(FileSystemParametersDefine.REMOTE_SERVICES, remoteServices);
- fileSystemParams.AddParameter(FileSystemParametersDefine.DECRYPTION_SERVICES, decryptionServices);
- fileSystemParams.AddParameter(FileSystemParametersDefine.FILE_VERIFY_LEVEL, verifyLevel);
- fileSystemParams.AddParameter(FileSystemParametersDefine.APPEND_FILE_EXTENSION, true);
- fileSystemParams.AddParameter(FileSystemParametersDefine.RAW_FILE_BUILD_PIPELINE, true);
- return fileSystemParams;
- }
-
///
/// 创建默认的WebServer文件系统参数
///
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Bundle.meta b/Assets/YooAsset/Runtime/ResourceManager/Bundle.meta
deleted file mode 100644
index 37e76299..00000000
--- a/Assets/YooAsset/Runtime/ResourceManager/Bundle.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: a9ca0d0d29eb5294b9c6926c6a09e76b
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Bundle/RawBundle.cs b/Assets/YooAsset/Runtime/ResourceManager/Bundle/RawBundle.cs
deleted file mode 100644
index 5fdfc5b7..00000000
--- a/Assets/YooAsset/Runtime/ResourceManager/Bundle/RawBundle.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-
-namespace YooAsset
-{
- internal class RawBundle
- {
- private readonly IFileSystem _fileSystem;
- private readonly PackageBundle _packageBundle;
- private readonly string _filePath;
-
- internal RawBundle(IFileSystem fileSystem, PackageBundle packageBundle, string filePath)
- {
- _fileSystem = fileSystem;
- _packageBundle = packageBundle;
- _filePath = filePath;
- }
-
- public string GetFilePath()
- {
- return _filePath;
- }
- public byte[] ReadFileData()
- {
- if (_fileSystem != null)
- return _fileSystem.ReadFileData(_packageBundle);
- else
- return FileUtility.ReadAllBytes(_filePath);
- }
- public string ReadFileText()
- {
- if (_fileSystem != null)
- return _fileSystem.ReadFileText(_packageBundle);
- else
- return FileUtility.ReadAllText(_filePath);
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Bundle/VirtualBundle.cs b/Assets/YooAsset/Runtime/ResourceManager/Bundle/VirtualBundle.cs
deleted file mode 100644
index 1c8ba367..00000000
--- a/Assets/YooAsset/Runtime/ResourceManager/Bundle/VirtualBundle.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-
-namespace YooAsset
-{
- internal class VirtualBundle
- {
- private readonly IFileSystem _fileSystem;
- private readonly PackageBundle _packageBundle;
-
- internal VirtualBundle(IFileSystem fileSystem, PackageBundle packageBundle)
- {
- _fileSystem = fileSystem;
- _packageBundle = packageBundle;
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Handle/RawFileHandle.cs b/Assets/YooAsset/Runtime/ResourceManager/Handle/RawFileHandle.cs
index 19a73be8..6f04ba2c 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Handle/RawFileHandle.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Handle/RawFileHandle.cs
@@ -72,7 +72,7 @@ namespace YooAsset
{
if (IsValidWithWarning == false)
return null;
- return Provider.RawBundleObject.ReadFileData();
+ return Provider.BundleResultObject.ReadBundleFileData();
}
///
@@ -82,7 +82,7 @@ namespace YooAsset
{
if (IsValidWithWarning == false)
return null;
- return Provider.RawBundleObject.ReadFileText();
+ return Provider.BundleResultObject.ReadBundleFileText();
}
///
@@ -92,7 +92,7 @@ namespace YooAsset
{
if (IsValidWithWarning == false)
return string.Empty;
- return Provider.RawBundleObject.GetFilePath();
+ return Provider.BundleResultObject.GetBundleFilePath();
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Handle/SceneHandle.cs b/Assets/YooAsset/Runtime/ResourceManager/Handle/SceneHandle.cs
index 7b093aca..fd2727f0 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Handle/SceneHandle.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Handle/SceneHandle.cs
@@ -100,14 +100,9 @@ namespace YooAsset
if (IsValidWithWarning == false)
return false;
- if (Provider is DatabaseSceneProvider)
+ if (Provider is SceneProvider)
{
- var provider = Provider as DatabaseSceneProvider;
- provider.UnSuspendLoad();
- }
- else if (Provider is BundledSceneProvider)
- {
- var provider = Provider as BundledSceneProvider;
+ var provider = Provider as SceneProvider;
provider.UnSuspendLoad();
}
else
@@ -125,14 +120,9 @@ namespace YooAsset
if (IsValidWithWarning == false)
return false;
- if (Provider is DatabaseSceneProvider)
+ if (Provider is SceneProvider)
{
- var temp = Provider as DatabaseSceneProvider;
- return temp.SceneMode == LoadSceneMode.Single;
- }
- else if (Provider is BundledSceneProvider)
- {
- var temp = Provider as BundledSceneProvider;
+ var temp = Provider as SceneProvider;
return temp.SceneMode == LoadSceneMode.Single;
}
else
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Handle/SubAssetsHandle.cs b/Assets/YooAsset/Runtime/ResourceManager/Handle/SubAssetsHandle.cs
index 175a9b58..1e73c8db 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Handle/SubAssetsHandle.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Handle/SubAssetsHandle.cs
@@ -67,13 +67,13 @@ namespace YooAsset
///
/// 子资源对象集合
///
- public IReadOnlyList AllAssetObjects
+ public IReadOnlyList SubAssetObjects
{
get
{
if (IsValidWithWarning == false)
return null;
- return Provider.AllAssetObjects;
+ return Provider.SubAssetObjects;
}
}
@@ -87,7 +87,7 @@ namespace YooAsset
if (IsValidWithWarning == false)
return null;
- foreach (var assetObject in Provider.AllAssetObjects)
+ foreach (var assetObject in Provider.SubAssetObjects)
{
if (assetObject.name == assetName && assetObject is TObject)
return assetObject as TObject;
@@ -106,8 +106,8 @@ namespace YooAsset
if (IsValidWithWarning == false)
return null;
- List ret = new List(Provider.AllAssetObjects.Length);
- foreach (var assetObject in Provider.AllAssetObjects)
+ List ret = new List(Provider.SubAssetObjects.Length);
+ foreach (var assetObject in Provider.SubAssetObjects)
{
var retObject = assetObject as TObject;
if (retObject != null)
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Loader/LoadBundleFileOperation.cs b/Assets/YooAsset/Runtime/ResourceManager/Loader/LoadBundleFileOperation.cs
index 520643f4..7d8ac92f 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Loader/LoadBundleFileOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Loader/LoadBundleFileOperation.cs
@@ -22,7 +22,7 @@ namespace YooAsset
///
/// 资源包文件信息
///
- public BundleInfo BundleFileInfo { private set; get; }
+ public BundleInfo LoadBundleInfo { private set; get; }
///
/// 是否已经销毁
@@ -47,13 +47,13 @@ namespace YooAsset
///
/// 加载结果
///
- public object Result { set; get; }
+ public BundleResult Result { set; get; }
internal LoadBundleFileOperation(ResourceManager resourceManager, BundleInfo bundleInfo)
{
_resourceManager = resourceManager;
- BundleFileInfo = bundleInfo;
+ LoadBundleInfo = bundleInfo;
}
internal override void InternalOnStart()
{
@@ -67,7 +67,7 @@ namespace YooAsset
if (_steps == ESteps.LoadFile)
{
if (_loadBundleOp == null)
- _loadBundleOp = BundleFileInfo.LoadBundleFile();
+ _loadBundleOp = LoadBundleInfo.LoadBundleFile();
if (IsWaitForAsyncComplete)
_loadBundleOp.WaitForAsyncComplete();
@@ -83,7 +83,7 @@ namespace YooAsset
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"The bundle loader result is null ! {BundleFileInfo.Bundle.BundleName}";
+ Error = $"The bundle loader result is null ! {LoadBundleInfo.Bundle.BundleName}";
}
else
{
@@ -137,11 +137,12 @@ namespace YooAsset
// Check fatal
if (RefCount > 0)
- throw new Exception($"Bundle file loader ref is not zero : {BundleFileInfo.Bundle.BundleName}");
+ throw new Exception($"Bundle file loader ref is not zero : {LoadBundleInfo.Bundle.BundleName}");
if (IsDone == false)
- throw new Exception($"Bundle file loader is not done : {BundleFileInfo.Bundle.BundleName}");
+ throw new Exception($"Bundle file loader is not done : {LoadBundleInfo.Bundle.BundleName}");
- BundleFileInfo.UnloadBundleFile(Result);
+ if (Result != null)
+ Result.UnloadBundleFile();
}
///
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Loader/LoadDependFileOperation.cs b/Assets/YooAsset/Runtime/ResourceManager/Loader/LoadDependFileOperation.cs
deleted file mode 100644
index df718c63..00000000
--- a/Assets/YooAsset/Runtime/ResourceManager/Loader/LoadDependFileOperation.cs
+++ /dev/null
@@ -1,129 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-
-namespace YooAsset
-{
- internal class LoadDependBundleFileOperation : AsyncOperationBase
- {
- private enum ESteps
- {
- None,
- CheckDepend,
- CheckResult,
- Done,
- }
-
- ///
- /// 依赖的资源包加载器列表
- ///
- internal readonly List Depends;
- private ESteps _steps = ESteps.None;
-
-
- internal LoadDependBundleFileOperation(List dpends)
- {
- Depends = dpends;
- }
- internal override void InternalOnStart()
- {
- _steps = ESteps.CheckDepend;
- }
- internal override void InternalOnUpdate()
- {
- if (_steps == ESteps.None || _steps == ESteps.Done)
- return;
-
- if (_steps == ESteps.CheckDepend)
- {
- if (IsWaitForAsyncComplete)
- {
- foreach (var loader in Depends)
- {
- loader.WaitForAsyncComplete();
- }
- }
-
- foreach (var loader in Depends)
- {
- if (loader.IsDone == false)
- return;
- }
- _steps = ESteps.CheckResult;
- }
-
- if (_steps == ESteps.CheckResult)
- {
- LoadBundleFileOperation failedLoader = null;
- foreach (var loader in Depends)
- {
- if (loader.Status != EOperationStatus.Succeed)
- {
- failedLoader = loader;
- break;
- }
- }
-
- if (failedLoader == null)
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Succeed;
- }
- else
- {
- _steps = ESteps.Done;
- Status = EOperationStatus.Failed;
- Error = failedLoader.Error;
- }
- }
- }
- internal override void InternalWaitForAsyncComplete()
- {
- while (true)
- {
- if (ExecuteWhileDone())
- {
- _steps = ESteps.Done;
- break;
- }
- }
- }
-
- ///
- /// 增加引用计数
- ///
- public void Reference()
- {
- foreach (var loader in Depends)
- {
- loader.Reference();
- }
- }
-
- ///
- /// 减少引用计数
- ///
- public void Release()
- {
- foreach (var loader in Depends)
- {
- loader.Release();
- }
- }
-
- ///
- /// 获取资源包的调试信息列表
- ///
- internal void GetBundleDebugInfos(List output)
- {
- foreach (var loader in Depends)
- {
- var bundleInfo = new DebugBundleInfo();
- bundleInfo.BundleName = loader.BundleFileInfo.Bundle.BundleName;
- bundleInfo.RefCount = loader.RefCount;
- bundleInfo.Status = loader.Status;
- output.Add(bundleInfo);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Operation/InstantiateOperation.cs b/Assets/YooAsset/Runtime/ResourceManager/Operation/InstantiateOperation.cs
index 330a82b2..f0e0bad7 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Operation/InstantiateOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Operation/InstantiateOperation.cs
@@ -74,7 +74,7 @@ namespace YooAsset
}
#if UNITY_2023_3_OR_NEWER
- //TODO
+ //TODO : 官方BUG
// BUG环境:Windows平台,Unity2022.3.41f1版本,编辑器模式。
// BUG描述:异步实例化Prefab预制体,有概率丢失Mono脚本里序列化的数组里某个成员!
//_steps = ESteps.CloneAsync;
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadSceneOperation.cs b/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadSceneOperation.cs
index a815cf2d..8ed2d799 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadSceneOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadSceneOperation.cs
@@ -32,14 +32,9 @@ namespace YooAsset
_provider = provider;
// 注意:卸载场景前必须先解除挂起操作
- if (provider is DatabaseSceneProvider)
+ if (provider is SceneProvider)
{
- var temp = provider as DatabaseSceneProvider;
- temp.UnSuspendLoad();
- }
- else if (provider is BundledSceneProvider)
- {
- var temp = provider as BundledSceneProvider;
+ var temp = provider as SceneProvider;
temp.UnSuspendLoad();
}
else
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadUnusedAssetsOperation.cs b/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadUnusedAssetsOperation.cs
index a3248bb6..7ac87835 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadUnusedAssetsOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Operation/UnloadUnusedAssetsOperation.cs
@@ -52,7 +52,7 @@ namespace YooAsset
// 销毁文件加载器
foreach (var loader in removeList)
{
- string bundleName = loader.BundleFileInfo.Bundle.BundleName;
+ string bundleName = loader.LoadBundleInfo.Bundle.BundleName;
loader.DestroyLoader();
_resManager._loaderDic.Remove(bundleName);
}
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/AllAssetsProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/AllAssetsProvider.cs
new file mode 100644
index 00000000..5c4a7ba0
--- /dev/null
+++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/AllAssetsProvider.cs
@@ -0,0 +1,36 @@
+
+namespace YooAsset
+{
+ internal sealed class AllAssetsProvider : ProviderOperation
+ {
+ private FSLoadAllAssetsOperation _loadAllAssetsOp;
+
+ public AllAssetsProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo) : base(manager, providerGUID, assetInfo)
+ {
+ }
+ protected override void ProcessBundleResult()
+ {
+ if (_loadAllAssetsOp == null)
+ {
+ _loadAllAssetsOp = BundleResultObject.LoadAllAssetsAsync(MainAssetInfo);
+ }
+
+ if (IsWaitForAsyncComplete)
+ _loadAllAssetsOp.WaitForAsyncComplete();
+
+ Progress = _loadAllAssetsOp.Progress;
+ if (_loadAllAssetsOp.IsDone == false)
+ return;
+
+ if (_loadAllAssetsOp.Status != EOperationStatus.Succeed)
+ {
+ InvokeCompletion(_loadAllAssetsOp.Error, EOperationStatus.Failed);
+ }
+ else
+ {
+ AllAssetObjects = _loadAllAssetsOp.Result;
+ InvokeCompletion(string.Empty, EOperationStatus.Succeed);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledAllAssetsProvider.cs.meta b/Assets/YooAsset/Runtime/ResourceManager/Provider/AllAssetsProvider.cs.meta
similarity index 83%
rename from Assets/YooAsset/Runtime/ResourceManager/Provider/BundledAllAssetsProvider.cs.meta
rename to Assets/YooAsset/Runtime/ResourceManager/Provider/AllAssetsProvider.cs.meta
index ae86b337..8697f932 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledAllAssetsProvider.cs.meta
+++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/AllAssetsProvider.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 9b0e966838827284a9266a9f2237a460
+guid: 33f2d909fd8d9ab4eaedcded2519d1d8
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/AssetProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/AssetProvider.cs
new file mode 100644
index 00000000..847c7470
--- /dev/null
+++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/AssetProvider.cs
@@ -0,0 +1,36 @@
+
+namespace YooAsset
+{
+ internal sealed class AssetProvider : ProviderOperation
+ {
+ private FSLoadAssetOperation _loadAssetOp;
+
+ public AssetProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo) : base(manager, providerGUID, assetInfo)
+ {
+ }
+ protected override void ProcessBundleResult()
+ {
+ if (_loadAssetOp == null)
+ {
+ _loadAssetOp = BundleResultObject.LoadAssetAsync(MainAssetInfo);
+ }
+
+ if (IsWaitForAsyncComplete)
+ _loadAssetOp.WaitForAsyncComplete();
+
+ Progress = _loadAssetOp.Progress;
+ if (_loadAssetOp.IsDone == false)
+ return;
+
+ if (_loadAssetOp.Status != EOperationStatus.Succeed)
+ {
+ InvokeCompletion(_loadAssetOp.Error, EOperationStatus.Failed);
+ }
+ else
+ {
+ AssetObject = _loadAssetOp.Result;
+ InvokeCompletion(string.Empty, EOperationStatus.Succeed);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Bundle/VirtualBundle.cs.meta b/Assets/YooAsset/Runtime/ResourceManager/Provider/AssetProvider.cs.meta
similarity index 83%
rename from Assets/YooAsset/Runtime/ResourceManager/Bundle/VirtualBundle.cs.meta
rename to Assets/YooAsset/Runtime/ResourceManager/Provider/AssetProvider.cs.meta
index 775e6565..975e91c0 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Bundle/VirtualBundle.cs.meta
+++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/AssetProvider.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 822bb85f05144d842977dda341174db2
+guid: e6adffc18dc473141ad72e0f5da5dada
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledAllAssetsProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledAllAssetsProvider.cs
deleted file mode 100644
index 65299ea6..00000000
--- a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledAllAssetsProvider.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-namespace YooAsset
-{
- internal sealed class BundledAllAssetsProvider : ProviderOperation
- {
- private AssetBundle _assetBundle;
- private AssetBundleRequest _cacheRequest;
-
- public BundledAllAssetsProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo) : base(manager, providerGUID, assetInfo)
- {
- }
- internal override void InternalOnStart()
- {
- DebugBeginRecording();
- }
- internal override void InternalOnUpdate()
- {
- if (IsDone)
- return;
-
- if (_steps == ESteps.None)
- {
- _steps = ESteps.CheckBundle;
- }
-
- // 1. 检测资源包
- if (_steps == ESteps.CheckBundle)
- {
- if (LoadDependBundleFileOp.IsDone == false)
- return;
- if (LoadBundleFileOp.IsDone == false)
- return;
-
- if (LoadDependBundleFileOp.Status != EOperationStatus.Succeed)
- {
- InvokeCompletion(LoadDependBundleFileOp.Error, EOperationStatus.Failed);
- return;
- }
-
- if (LoadBundleFileOp.Status != EOperationStatus.Succeed)
- {
- InvokeCompletion(LoadBundleFileOp.Error, EOperationStatus.Failed);
- return;
- }
-
- if (LoadBundleFileOp.Result == null)
- {
- ProcessFatalEvent();
- return;
- }
-
- if (LoadBundleFileOp.Result is AssetBundle == false)
- {
- string error = "Try load raw file using load assetbundle method !";
- InvokeCompletion(error, EOperationStatus.Failed);
- return;
- }
-
- _assetBundle = LoadBundleFileOp.Result as AssetBundle;
- _steps = ESteps.Loading;
- }
-
- // 2. 加载资源对象
- if (_steps == ESteps.Loading)
- {
- if (IsWaitForAsyncComplete)
- {
- if (MainAssetInfo.AssetType == null)
- AllAssetObjects = _assetBundle.LoadAllAssets();
- else
- AllAssetObjects = _assetBundle.LoadAllAssets(MainAssetInfo.AssetType);
- }
- else
- {
- if (MainAssetInfo.AssetType == null)
- _cacheRequest = _assetBundle.LoadAllAssetsAsync();
- else
- _cacheRequest = _assetBundle.LoadAllAssetsAsync(MainAssetInfo.AssetType);
- }
- _steps = ESteps.Checking;
- }
-
- // 3. 检测加载结果
- if (_steps == ESteps.Checking)
- {
- if (_cacheRequest != null)
- {
- if (IsWaitForAsyncComplete)
- {
- // 强制挂起主线程(注意:该操作会很耗时)
- YooLogger.Warning("Suspend the main thread to load unity asset.");
- AllAssetObjects = _cacheRequest.allAssets;
- }
- else
- {
- Progress = _cacheRequest.progress;
- if (_cacheRequest.isDone == false)
- return;
- AllAssetObjects = _cacheRequest.allAssets;
- }
- }
-
- if (AllAssetObjects == null)
- {
- string error;
- if (MainAssetInfo.AssetType == null)
- error = $"Failed to load all assets : {MainAssetInfo.AssetPath} AssetType : null AssetBundle : {LoadBundleFileOp.BundleFileInfo.Bundle.BundleName}";
- else
- error = $"Failed to load all assets : {MainAssetInfo.AssetPath} AssetType : {MainAssetInfo.AssetType} AssetBundle : {LoadBundleFileOp.BundleFileInfo.Bundle.BundleName}";
- YooLogger.Error(error);
- InvokeCompletion(error, EOperationStatus.Failed);
- }
- else
- {
- InvokeCompletion(string.Empty, EOperationStatus.Succeed);
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledAssetProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledAssetProvider.cs
deleted file mode 100644
index 4937f6af..00000000
--- a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledAssetProvider.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-namespace YooAsset
-{
- internal sealed class BundledAssetProvider : ProviderOperation
- {
- private AssetBundle _assetBundle;
- private AssetBundleRequest _cacheRequest;
-
- public BundledAssetProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo) : base(manager, providerGUID, assetInfo)
- {
- }
- internal override void InternalOnStart()
- {
- DebugBeginRecording();
- }
- internal override void InternalOnUpdate()
- {
- if (IsDone)
- return;
-
- if (_steps == ESteps.None)
- {
- _steps = ESteps.CheckBundle;
- }
-
- // 1. 检测资源包
- if (_steps == ESteps.CheckBundle)
- {
- if (LoadDependBundleFileOp.IsDone == false)
- return;
- if (LoadBundleFileOp.IsDone == false)
- return;
-
- if (LoadDependBundleFileOp.Status != EOperationStatus.Succeed)
- {
- InvokeCompletion(LoadDependBundleFileOp.Error, EOperationStatus.Failed);
- return;
- }
-
- if (LoadBundleFileOp.Status != EOperationStatus.Succeed)
- {
- InvokeCompletion(LoadBundleFileOp.Error, EOperationStatus.Failed);
- return;
- }
-
- if (LoadBundleFileOp.Result == null)
- {
- ProcessFatalEvent();
- return;
- }
-
- if (LoadBundleFileOp.Result is AssetBundle == false)
- {
- string error = "Try load raw file using load assetbundle method !";
- InvokeCompletion(error, EOperationStatus.Failed);
- return;
- }
-
- _assetBundle = LoadBundleFileOp.Result as AssetBundle;
- _steps = ESteps.Loading;
- }
-
- // 2. 加载资源对象
- if (_steps == ESteps.Loading)
- {
- if (IsWaitForAsyncComplete)
- {
- if (MainAssetInfo.AssetType == null)
- AssetObject = _assetBundle.LoadAsset(MainAssetInfo.AssetPath);
- else
- AssetObject = _assetBundle.LoadAsset(MainAssetInfo.AssetPath, MainAssetInfo.AssetType);
- }
- else
- {
- if (MainAssetInfo.AssetType == null)
- _cacheRequest = _assetBundle.LoadAssetAsync(MainAssetInfo.AssetPath);
- else
- _cacheRequest = _assetBundle.LoadAssetAsync(MainAssetInfo.AssetPath, MainAssetInfo.AssetType);
- }
- _steps = ESteps.Checking;
- }
-
- // 3. 检测加载结果
- if (_steps == ESteps.Checking)
- {
- if (_cacheRequest != null)
- {
- if (IsWaitForAsyncComplete)
- {
- // 强制挂起主线程(注意:该操作会很耗时)
- YooLogger.Warning("Suspend the main thread to load unity asset.");
- AssetObject = _cacheRequest.asset;
- }
- else
- {
- Progress = _cacheRequest.progress;
- if (_cacheRequest.isDone == false)
- return;
- AssetObject = _cacheRequest.asset;
- }
- }
-
- if (AssetObject == null)
- {
- string error;
- if (MainAssetInfo.AssetType == null)
- error = $"Failed to load asset : {MainAssetInfo.AssetPath} AssetType : null AssetBundle : {LoadBundleFileOp.BundleFileInfo.Bundle.BundleName}";
- else
- error = $"Failed to load asset : {MainAssetInfo.AssetPath} AssetType : {MainAssetInfo.AssetType} AssetBundle : {LoadBundleFileOp.BundleFileInfo.Bundle.BundleName}";
- YooLogger.Error(error);
- InvokeCompletion(error, EOperationStatus.Failed);
- }
- else
- {
- InvokeCompletion(string.Empty, EOperationStatus.Succeed);
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledAssetProvider.cs.meta b/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledAssetProvider.cs.meta
deleted file mode 100644
index 3e28b3f1..00000000
--- a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledAssetProvider.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: ca5e4bf0c3efe6742bb57b494487be52
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledRawFileProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledRawFileProvider.cs
deleted file mode 100644
index a64acbf9..00000000
--- a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledRawFileProvider.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-
-namespace YooAsset
-{
- internal class BundledRawFileProvider : ProviderOperation
- {
- public BundledRawFileProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo) : base(manager, providerGUID, assetInfo)
- {
- }
- internal override void InternalOnStart()
- {
- DebugBeginRecording();
- }
- internal override void InternalOnUpdate()
- {
- if (IsDone)
- return;
-
- if (_steps == ESteps.None)
- {
- _steps = ESteps.CheckBundle;
- }
-
- // 1. 检测资源包
- if (_steps == ESteps.CheckBundle)
- {
- if (LoadBundleFileOp.IsDone == false)
- return;
-
- if (LoadBundleFileOp.Status != EOperationStatus.Succeed)
- {
- InvokeCompletion(LoadBundleFileOp.Error, EOperationStatus.Failed);
- return;
- }
-
- if (LoadBundleFileOp.Result is RawBundle == false)
- {
- string error = "Try load AssetBundle file using load raw file method !";
- InvokeCompletion(error, EOperationStatus.Failed);
- return;
- }
-
- _steps = ESteps.Checking;
- }
-
- // 2. 检测加载结果
- if (_steps == ESteps.Checking)
- {
- RawBundleObject = LoadBundleFileOp.Result as RawBundle;
- InvokeCompletion(string.Empty, EOperationStatus.Succeed);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledRawFileProvider.cs.meta b/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledRawFileProvider.cs.meta
deleted file mode 100644
index 58ba438d..00000000
--- a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledRawFileProvider.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 8a00889582fd95446b103af1074fa6ba
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledSceneProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledSceneProvider.cs
deleted file mode 100644
index ff156aef..00000000
--- a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledSceneProvider.cs
+++ /dev/null
@@ -1,148 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using System.IO;
-using UnityEngine;
-using UnityEngine.SceneManagement;
-
-namespace YooAsset
-{
- internal sealed class BundledSceneProvider : ProviderOperation
- {
- public readonly LoadSceneParameters LoadSceneParams;
- private AsyncOperation _asyncOperation;
- private bool _suspendLoadMode;
-
- ///
- /// 场景加载模式
- ///
- public LoadSceneMode SceneMode
- {
- get
- {
- return LoadSceneParams.loadSceneMode;
- }
- }
-
- public BundledSceneProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo, LoadSceneParameters loadSceneParams, bool suspendLoad) : base(manager, providerGUID, assetInfo)
- {
- LoadSceneParams = loadSceneParams;
- SceneName = Path.GetFileNameWithoutExtension(assetInfo.AssetPath);
- _suspendLoadMode = suspendLoad;
- }
- internal override void InternalOnStart()
- {
- DebugBeginRecording();
- }
- internal override void InternalOnUpdate()
- {
- if (IsDone)
- return;
-
- if (_steps == ESteps.None)
- {
- _steps = ESteps.CheckBundle;
- }
-
- // 1. 检测资源包
- if (_steps == ESteps.CheckBundle)
- {
- if (LoadDependBundleFileOp.IsDone == false)
- return;
- if (LoadBundleFileOp.IsDone == false)
- return;
-
- if (LoadDependBundleFileOp.Status != EOperationStatus.Succeed)
- {
- InvokeCompletion(LoadDependBundleFileOp.Error, EOperationStatus.Failed);
- return;
- }
-
- if (LoadBundleFileOp.Status != EOperationStatus.Succeed)
- {
- InvokeCompletion(LoadBundleFileOp.Error, EOperationStatus.Failed);
- return;
- }
-
- _steps = ESteps.Loading;
- }
-
- // 2. 加载场景
- if (_steps == ESteps.Loading)
- {
- if (IsWaitForAsyncComplete)
- {
- // 注意:场景同步加载方法不会立即加载场景,而是在下一帧加载。
- SceneObject = SceneManager.LoadScene(MainAssetInfo.AssetPath, LoadSceneParams);
- _steps = ESteps.Checking;
- }
- else
- {
- // 注意:如果场景不存在异步加载方法返回NULL
- // 注意:即使是异步加载也要在当帧获取到场景对象
- _asyncOperation = SceneManager.LoadSceneAsync(MainAssetInfo.AssetPath, LoadSceneParams);
- if (_asyncOperation != null)
- {
- _asyncOperation.allowSceneActivation = !_suspendLoadMode;
- _asyncOperation.priority = 100;
- SceneObject = SceneManager.GetSceneAt(SceneManager.sceneCount - 1);
- _steps = ESteps.Checking;
- }
- else
- {
- string error = $"Failed to load scene : {MainAssetInfo.AssetPath}";
- YooLogger.Error(error);
- InvokeCompletion(error, EOperationStatus.Failed);
- }
- }
- }
-
- // 3. 检测加载结果
- if (_steps == ESteps.Checking)
- {
- if (_asyncOperation != null)
- {
- if (IsWaitForAsyncComplete)
- {
- // 场景加载无法强制异步转同步
- YooLogger.Error("The scene is loading asyn !");
- }
- else
- {
- // 注意:在业务层中途可以取消挂起
- if (_asyncOperation.allowSceneActivation == false)
- {
- if (_suspendLoadMode == false)
- _asyncOperation.allowSceneActivation = true;
- }
-
- Progress = _asyncOperation.progress;
- if (_asyncOperation.isDone == false)
- return;
- }
- }
-
- if (SceneObject.IsValid())
- {
- InvokeCompletion(string.Empty, EOperationStatus.Succeed);
- }
- else
- {
- string error = $"The loaded scene is invalid : {MainAssetInfo.AssetPath}";
- YooLogger.Error(error);
- InvokeCompletion(error, EOperationStatus.Failed);
- }
- }
- }
-
- ///
- /// 解除场景加载挂起操作
- ///
- public void UnSuspendLoad()
- {
- if (IsDone == false)
- {
- _suspendLoadMode = false;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledSceneProvider.cs.meta b/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledSceneProvider.cs.meta
deleted file mode 100644
index b857bef5..00000000
--- a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledSceneProvider.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 38b1b77cff590ca4e808c5068c9bf88b
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledSubAssetsProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledSubAssetsProvider.cs
deleted file mode 100644
index ad74dcda..00000000
--- a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledSubAssetsProvider.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-namespace YooAsset
-{
- internal sealed class BundledSubAssetsProvider : ProviderOperation
- {
- private AssetBundle _assetBundle;
- private AssetBundleRequest _cacheRequest;
-
- public BundledSubAssetsProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo) : base(manager, providerGUID, assetInfo)
- {
- }
- internal override void InternalOnStart()
- {
- DebugBeginRecording();
- }
- internal override void InternalOnUpdate()
- {
- if (IsDone)
- return;
-
- if (_steps == ESteps.None)
- {
- _steps = ESteps.CheckBundle;
- }
-
- // 1. 检测资源包
- if (_steps == ESteps.CheckBundle)
- {
- if (LoadDependBundleFileOp.IsDone == false)
- return;
- if (LoadBundleFileOp.IsDone == false)
- return;
-
- if (LoadDependBundleFileOp.Status != EOperationStatus.Succeed)
- {
- InvokeCompletion(LoadDependBundleFileOp.Error, EOperationStatus.Failed);
- return;
- }
-
- if (LoadBundleFileOp.Status != EOperationStatus.Succeed)
- {
- InvokeCompletion(LoadBundleFileOp.Error, EOperationStatus.Failed);
- return;
- }
-
- if (LoadBundleFileOp.Result == null)
- {
- ProcessFatalEvent();
- return;
- }
-
- if (LoadBundleFileOp.Result is AssetBundle == false)
- {
- string error = "Try load raw file using load assetbundle method !";
- InvokeCompletion(error, EOperationStatus.Failed);
- return;
- }
-
- _assetBundle = LoadBundleFileOp.Result as AssetBundle;
- _steps = ESteps.Loading;
- }
-
- // 2. 加载资源对象
- if (_steps == ESteps.Loading)
- {
- if (IsWaitForAsyncComplete)
- {
- if (MainAssetInfo.AssetType == null)
- AllAssetObjects = _assetBundle.LoadAssetWithSubAssets(MainAssetInfo.AssetPath);
- else
- AllAssetObjects = _assetBundle.LoadAssetWithSubAssets(MainAssetInfo.AssetPath, MainAssetInfo.AssetType);
- }
- else
- {
- if (MainAssetInfo.AssetType == null)
- _cacheRequest = _assetBundle.LoadAssetWithSubAssetsAsync(MainAssetInfo.AssetPath);
- else
- _cacheRequest = _assetBundle.LoadAssetWithSubAssetsAsync(MainAssetInfo.AssetPath, MainAssetInfo.AssetType);
- }
- _steps = ESteps.Checking;
- }
-
- // 3. 检测加载结果
- if (_steps == ESteps.Checking)
- {
- if (_cacheRequest != null)
- {
- if (IsWaitForAsyncComplete)
- {
- // 强制挂起主线程(注意:该操作会很耗时)
- YooLogger.Warning("Suspend the main thread to load unity asset.");
- AllAssetObjects = _cacheRequest.allAssets;
- }
- else
- {
- Progress = _cacheRequest.progress;
- if (_cacheRequest.isDone == false)
- return;
- AllAssetObjects = _cacheRequest.allAssets;
- }
- }
-
- if (AllAssetObjects == null)
- {
- string error;
- if (MainAssetInfo.AssetType == null)
- error = $"Failed to load sub assets : {MainAssetInfo.AssetPath} AssetType : null AssetBundle : {LoadBundleFileOp.BundleFileInfo.Bundle.BundleName}";
- else
- error = $"Failed to load sub assets : {MainAssetInfo.AssetPath} AssetType : {MainAssetInfo.AssetType} AssetBundle : {LoadBundleFileOp.BundleFileInfo.Bundle.BundleName}";
- YooLogger.Error(error);
- InvokeCompletion(error, EOperationStatus.Failed);
- }
- else
- {
- InvokeCompletion(string.Empty, EOperationStatus.Succeed);
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledSubAssetsProvider.cs.meta b/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledSubAssetsProvider.cs.meta
deleted file mode 100644
index 36e1c3d4..00000000
--- a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledSubAssetsProvider.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: b3763bf52bde23b41a756f0d015cb30d
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/CompletedProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/CompletedProvider.cs
index 665426c5..5a81585e 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Provider/CompletedProvider.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/CompletedProvider.cs
@@ -6,20 +6,13 @@ namespace YooAsset
public CompletedProvider(ResourceManager manager, AssetInfo assetInfo) : base(manager, string.Empty, assetInfo)
{
}
-
- internal override void InternalOnStart()
- {
- }
- internal override void InternalOnUpdate()
+ protected override void ProcessBundleResult()
{
}
- public void SetCompleted(string error)
+ public void SetCompletedWithError(string error)
{
- if (_steps == ESteps.None)
- {
- InvokeCompletion(error, EOperationStatus.Failed);
- }
+ InvokeCompletion(error, EOperationStatus.Failed);
}
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/DatabaseAllAssetsProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/DatabaseAllAssetsProvider.cs
deleted file mode 100644
index 1c656083..00000000
--- a/Assets/YooAsset/Runtime/ResourceManager/Provider/DatabaseAllAssetsProvider.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-namespace YooAsset
-{
- internal sealed class DatabaseAllAssetsProvider : ProviderOperation
- {
- public DatabaseAllAssetsProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo) : base(manager, providerGUID, assetInfo)
- {
- }
- internal override void InternalOnStart()
- {
- DebugBeginRecording();
- }
- internal override void InternalOnUpdate()
- {
-#if UNITY_EDITOR
- if (IsDone)
- return;
-
- if (_steps == ESteps.None)
- {
- // 检测资源文件是否存在
- string guid = UnityEditor.AssetDatabase.AssetPathToGUID(MainAssetInfo.AssetPath);
- if (string.IsNullOrEmpty(guid))
- {
- string error = $"Not found asset : {MainAssetInfo.AssetPath}";
- YooLogger.Error(error);
- InvokeCompletion(error, EOperationStatus.Failed);
- return;
- }
-
- _steps = ESteps.CheckBundle;
-
- // 注意:模拟异步加载效果提前返回
- if (IsWaitForAsyncComplete == false)
- return;
- }
-
- // 1. 检测资源包
- if (_steps == ESteps.CheckBundle)
- {
- if (LoadBundleFileOp.IsDone == false)
- return;
-
- if (LoadBundleFileOp.Status != EOperationStatus.Succeed)
- {
- InvokeCompletion(LoadBundleFileOp.Error, EOperationStatus.Failed);
- return;
- }
-
- _steps = ESteps.Loading;
- }
-
- // 2. 加载资源对象
- if (_steps == ESteps.Loading)
- {
- if (MainAssetInfo.AssetType == null)
- {
- List result = new List
public UnityEngine.Object[] AllAssetObjects { protected set; get; }
+ ///
+ /// 获取的资源对象集合
+ ///
+ public UnityEngine.Object[] SubAssetObjects { protected set; get; }
+
///
/// 获取的场景对象
///
public UnityEngine.SceneManagement.Scene SceneObject { protected set; get; }
///
- /// 获取的原生对象
+ /// 获取的资源包对象
///
- public RawBundle RawBundleObject { protected set; get; }
+ public BundleResult BundleResultObject { protected set; get; }
///
/// 加载的场景名称
@@ -67,9 +71,9 @@ namespace YooAsset
public bool IsDestroyed { private set; get; } = false;
- protected ESteps _steps = ESteps.None;
- protected LoadBundleFileOperation LoadBundleFileOp { private set; get; }
- protected LoadDependBundleFileOperation LoadDependBundleFileOp { private set; get; }
+ private ESteps _steps = ESteps.None;
+ private readonly LoadBundleFileOperation _mainBundleLoader;
+ private readonly List _bundleLoaders = new List();
private readonly List _handles = new List();
@@ -81,25 +85,75 @@ namespace YooAsset
if (string.IsNullOrEmpty(providerGUID) == false)
{
- LoadBundleFileOp = manager.CreateMainBundleFileLoader(assetInfo);
- LoadBundleFileOp.Reference();
- LoadBundleFileOp.AddProvider(this);
+ // 主资源包加载器
+ _mainBundleLoader = manager.CreateMainBundleFileLoader(assetInfo);
+ _mainBundleLoader.AddProvider(this);
+ _bundleLoaders.Add(_mainBundleLoader);
- LoadDependBundleFileOp = manager.CreateDependFileLoaders(assetInfo);
- LoadDependBundleFileOp.Reference();
+ // 依赖资源包加载器集合
+ var dependLoaders = manager.CreateDependBundleFileLoaders(assetInfo);
+ if(dependLoaders.Count > 0)
+ _bundleLoaders.AddRange(dependLoaders);
+
+ // 增加引用计数
+ foreach (var bundleLoader in _bundleLoaders)
+ {
+ bundleLoader.Reference();
+ }
}
}
+ internal override void InternalOnStart()
+ {
+ DebugBeginRecording();
+ _steps = ESteps.LoadBundleFile;
+ }
+ internal override void InternalOnUpdate()
+ {
+ if (_steps == ESteps.None || _steps == ESteps.Done)
+ return;
+ if (_steps == ESteps.LoadBundleFile)
+ {
+ if (IsWaitForAsyncComplete)
+ {
+ foreach (var bundleLoader in _bundleLoaders)
+ {
+ bundleLoader.WaitForAsyncComplete();
+ }
+ }
+
+ foreach (var bundleLoader in _bundleLoaders)
+ {
+ if (bundleLoader.IsDone == false)
+ return;
+
+ if (bundleLoader.Status != EOperationStatus.Succeed)
+ {
+ InvokeCompletion(bundleLoader.Error, EOperationStatus.Failed);
+ return;
+ }
+ }
+
+ BundleResultObject = _mainBundleLoader.Result;
+ if (BundleResultObject == null)
+ {
+ string error = $"Loaded bundle result is null !";
+ InvokeCompletion(error, EOperationStatus.Failed);
+ return;
+ }
+
+ _steps = ESteps.ProcessBundleResult;
+ }
+
+ if (_steps == ESteps.ProcessBundleResult)
+ {
+ ProcessBundleResult();
+ }
+ }
internal override void InternalWaitForAsyncComplete()
{
while (true)
{
- if (LoadDependBundleFileOp != null)
- LoadDependBundleFileOp.WaitForAsyncComplete();
-
- if (LoadBundleFileOp != null)
- LoadBundleFileOp.WaitForAsyncComplete();
-
if (ExecuteWhileDone())
{
_steps = ESteps.Done;
@@ -107,6 +161,7 @@ namespace YooAsset
}
}
}
+ protected abstract void ProcessBundleResult();
///
/// 销毁资源提供者
@@ -122,16 +177,10 @@ namespace YooAsset
Status = EOperationStatus.Failed;
}
- // 释放资源包加载器
- if (LoadBundleFileOp != null)
+ // 减少引用计数
+ foreach (var bundleLoader in _bundleLoaders)
{
- LoadBundleFileOp.Release();
- LoadBundleFileOp = null;
- }
- if (LoadDependBundleFileOp != null)
- {
- LoadDependBundleFileOp.Release();
- LoadDependBundleFileOp = null;
+ bundleLoader.Release();
}
}
@@ -141,7 +190,7 @@ namespace YooAsset
public bool CanDestroyProvider()
{
// 注意:在进行资源加载过程时不可以销毁
- if (_steps == ESteps.Loading || _steps == ESteps.Checking)
+ if (_steps == ESteps.ProcessBundleResult)
return false;
return RefCount <= 0;
@@ -200,19 +249,6 @@ namespace YooAsset
}
}
- ///
- /// 处理致命问题
- ///
- protected void ProcessFatalEvent()
- {
- if (LoadBundleFileOp.IsDestroyed)
- throw new System.Exception("Should never get here !");
-
- string error = $"The bundle {LoadBundleFileOp.BundleFileInfo.Bundle.BundleName} has been destroyed by unity bugs !";
- YooLogger.Error(error);
- InvokeCompletion(Error, EOperationStatus.Failed);
- }
-
///
/// 结束流程
///
@@ -242,12 +278,10 @@ namespace YooAsset
public DownloadStatus GetDownloadStatus()
{
DownloadStatus status = new DownloadStatus();
- status.TotalBytes = LoadBundleFileOp.BundleFileInfo.Bundle.FileSize;
- status.DownloadedBytes = LoadBundleFileOp.DownloadedBytes;
- foreach (var dependBundle in LoadDependBundleFileOp.Depends)
+ foreach (var bundleLoader in _bundleLoaders)
{
- status.TotalBytes += dependBundle.BundleFileInfo.Bundle.FileSize;
- status.DownloadedBytes += dependBundle.DownloadedBytes;
+ status.TotalBytes += bundleLoader.LoadBundleInfo.Bundle.FileSize;
+ status.DownloadedBytes += bundleLoader.DownloadedBytes;
}
if (status.TotalBytes == 0)
@@ -315,13 +349,14 @@ namespace YooAsset
///
internal void GetBundleDebugInfos(List output)
{
- var bundleInfo = new DebugBundleInfo();
- bundleInfo.BundleName = LoadBundleFileOp.BundleFileInfo.Bundle.BundleName;
- bundleInfo.RefCount = LoadBundleFileOp.RefCount;
- bundleInfo.Status = LoadBundleFileOp.Status;
- output.Add(bundleInfo);
-
- LoadDependBundleFileOp.GetBundleDebugInfos(output);
+ foreach (var bundleLoader in _bundleLoaders)
+ {
+ var bundleInfo = new DebugBundleInfo();
+ bundleInfo.BundleName = bundleLoader.LoadBundleInfo.Bundle.BundleName;
+ bundleInfo.RefCount = bundleLoader.RefCount;
+ bundleInfo.Status = bundleLoader.Status;
+ output.Add(bundleInfo);
+ }
}
#endregion
}
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/RawFileProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/RawFileProvider.cs
new file mode 100644
index 00000000..879c323c
--- /dev/null
+++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/RawFileProvider.cs
@@ -0,0 +1,14 @@
+
+namespace YooAsset
+{
+ internal class RawFileProvider : ProviderOperation
+ {
+ public RawFileProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo) : base(manager, providerGUID, assetInfo)
+ {
+ }
+ protected override void ProcessBundleResult()
+ {
+ InvokeCompletion(string.Empty, EOperationStatus.Succeed);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Bundle/RawBundle.cs.meta b/Assets/YooAsset/Runtime/ResourceManager/Provider/RawFileProvider.cs.meta
similarity index 83%
rename from Assets/YooAsset/Runtime/ResourceManager/Bundle/RawBundle.cs.meta
rename to Assets/YooAsset/Runtime/ResourceManager/Provider/RawFileProvider.cs.meta
index 1abf950e..849ac2fe 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Bundle/RawBundle.cs.meta
+++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/RawFileProvider.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: c6e71c986d2a8c74d981deeed7b5a8ef
+guid: 49b6e666518da98479966a5cf0504d59
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/SceneProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/SceneProvider.cs
new file mode 100644
index 00000000..1a6f365d
--- /dev/null
+++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/SceneProvider.cs
@@ -0,0 +1,69 @@
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+using UnityEngine.SceneManagement;
+
+namespace YooAsset
+{
+ internal sealed class SceneProvider : ProviderOperation
+ {
+ private readonly LoadSceneParameters _loadParams;
+ private bool _suspendLoad;
+ private FSLoadSceneOperation _loadSceneOp;
+
+ ///
+ /// 场景加载模式
+ ///
+ public LoadSceneMode SceneMode
+ {
+ get
+ {
+ return _loadParams.loadSceneMode;
+ }
+ }
+
+ public SceneProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo, LoadSceneParameters loadParams, bool suspendLoad) : base(manager, providerGUID, assetInfo)
+ {
+ _loadParams = loadParams;
+ _suspendLoad = suspendLoad;
+ SceneName = Path.GetFileNameWithoutExtension(assetInfo.AssetPath);
+ }
+ protected override void ProcessBundleResult()
+ {
+ if (_loadSceneOp == null)
+ {
+ _loadSceneOp = BundleResultObject.LoadSceneOperation(MainAssetInfo, _loadParams, _suspendLoad);
+ }
+
+ if (IsWaitForAsyncComplete)
+ _loadSceneOp.WaitForAsyncComplete();
+
+ // 注意:场景加载中途可以取消挂起
+ if (_suspendLoad == false)
+ _loadSceneOp.UnSuspendLoad();
+
+ Progress = _loadSceneOp.Progress;
+ if (_loadSceneOp.IsDone == false)
+ return;
+
+ if (_loadSceneOp.Status != EOperationStatus.Succeed)
+ {
+ InvokeCompletion(_loadSceneOp.Error, EOperationStatus.Failed);
+ }
+ else
+ {
+ SceneObject = _loadSceneOp.Result;
+ InvokeCompletion(string.Empty, EOperationStatus.Succeed);
+ }
+ }
+
+ ///
+ /// 解除场景加载挂起操作
+ ///
+ public void UnSuspendLoad()
+ {
+ _suspendLoad = false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Loader/LoadDependFileOperation.cs.meta b/Assets/YooAsset/Runtime/ResourceManager/Provider/SceneProvider.cs.meta
similarity index 83%
rename from Assets/YooAsset/Runtime/ResourceManager/Loader/LoadDependFileOperation.cs.meta
rename to Assets/YooAsset/Runtime/ResourceManager/Provider/SceneProvider.cs.meta
index edd0393a..ca503d52 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Loader/LoadDependFileOperation.cs.meta
+++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/SceneProvider.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 3834f832061fdd74fbfb1eba381b1b3e
+guid: 8586015105ad65f438e2f2e9c64c3df1
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/SubAssetsProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/SubAssetsProvider.cs
new file mode 100644
index 00000000..ee44b493
--- /dev/null
+++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/SubAssetsProvider.cs
@@ -0,0 +1,36 @@
+
+namespace YooAsset
+{
+ internal sealed class SubAssetsProvider : ProviderOperation
+ {
+ private FSLoadSubAssetsOperation _loadSubAssetsOp;
+
+ public SubAssetsProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo) : base(manager, providerGUID, assetInfo)
+ {
+ }
+ protected override void ProcessBundleResult()
+ {
+ if (_loadSubAssetsOp == null)
+ {
+ _loadSubAssetsOp = BundleResultObject.LoadSubAssetsAsync(MainAssetInfo);
+ }
+
+ if (IsWaitForAsyncComplete)
+ _loadSubAssetsOp.WaitForAsyncComplete();
+
+ Progress = _loadSubAssetsOp.Progress;
+ if (_loadSubAssetsOp.IsDone == false)
+ return;
+
+ if (_loadSubAssetsOp.Status != EOperationStatus.Succeed)
+ {
+ InvokeCompletion(_loadSubAssetsOp.Error, EOperationStatus.Failed);
+ }
+ else
+ {
+ SubAssetObjects = _loadSubAssetsOp.Result;
+ InvokeCompletion(string.Empty, EOperationStatus.Succeed);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/SubAssetsProvider.cs.meta b/Assets/YooAsset/Runtime/ResourceManager/Provider/SubAssetsProvider.cs.meta
new file mode 100644
index 00000000..1ead3daf
--- /dev/null
+++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/SubAssetsProvider.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0cef140e594c94640abfcd439f6b8be3
+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 894e7652..2cda07f4 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs
@@ -15,8 +15,6 @@ namespace YooAsset
internal readonly Dictionary _providerDic = new Dictionary(5000);
internal readonly Dictionary _loaderDic = new Dictionary(5000);
-
- private bool _simulationOnEditor;
private IBundleQuery _bundleQuery;
///
@@ -35,7 +33,6 @@ namespace YooAsset
///
public void Initialize(InitializeParameters initializeParameters, IBundleQuery bundleServices)
{
- _simulationOnEditor = initializeParameters is EditorSimulateModeParameters;
_bundleQuery = bundleServices;
}
@@ -52,13 +49,13 @@ namespace YooAsset
// 卸载主资源包加载器
string mainBundleName = _bundleQuery.GetMainBundleName(assetInfo);
- var mainLoader = TryGetFileLoader(mainBundleName);
+ var mainLoader = TryGetBundleFileLoader(mainBundleName);
if (mainLoader != null)
{
mainLoader.TryDestroyProviders();
if (mainLoader.CanDestroyLoader())
{
- string bundleName = mainLoader.BundleFileInfo.Bundle.BundleName;
+ string bundleName = mainLoader.LoadBundleInfo.Bundle.BundleName;
mainLoader.DestroyLoader();
_loaderDic.Remove(bundleName);
}
@@ -68,12 +65,12 @@ namespace YooAsset
string[] dependBundleNames = _bundleQuery.GetDependBundleNames(assetInfo);
foreach (var dependBundleName in dependBundleNames)
{
- var dependLoader = TryGetFileLoader(dependBundleName);
+ var dependLoader = TryGetBundleFileLoader(dependBundleName);
if (dependLoader != null)
{
if (dependLoader.CanDestroyLoader())
{
- string bundleName = dependLoader.BundleFileInfo.Bundle.BundleName;
+ string bundleName = dependLoader.LoadBundleInfo.Bundle.BundleName;
dependLoader.DestroyLoader();
_loaderDic.Remove(bundleName);
}
@@ -92,7 +89,7 @@ namespace YooAsset
{
YooLogger.Error($"Failed to load scene ! {assetInfo.Error}");
CompletedProvider completedProvider = new CompletedProvider(this, assetInfo);
- completedProvider.SetCompleted(assetInfo.Error);
+ completedProvider.SetCompletedWithError(assetInfo.Error);
return completedProvider.CreateHandle();
}
@@ -106,10 +103,7 @@ namespace YooAsset
string providerGUID = $"{assetInfo.GUID}-{++_sceneCreateCount}";
ProviderOperation provider;
{
- if (_simulationOnEditor)
- provider = new DatabaseSceneProvider(this, providerGUID, assetInfo, loadSceneParams, suspendLoad);
- else
- provider = new BundledSceneProvider(this, providerGUID, assetInfo, loadSceneParams, suspendLoad);
+ provider = new SceneProvider(this, providerGUID, assetInfo, loadSceneParams, suspendLoad);
provider.InitSpawnDebugInfo();
_providerDic.Add(providerGUID, provider);
OperationSystem.StartOperation(PackageName, provider);
@@ -131,18 +125,15 @@ namespace YooAsset
{
YooLogger.Error($"Failed to load asset ! {assetInfo.Error}");
CompletedProvider completedProvider = new CompletedProvider(this, assetInfo);
- completedProvider.SetCompleted(assetInfo.Error);
+ completedProvider.SetCompletedWithError(assetInfo.Error);
return completedProvider.CreateHandle();
}
string providerGUID = nameof(LoadAssetAsync) + assetInfo.GUID;
- ProviderOperation provider = TryGetProvider(providerGUID);
+ ProviderOperation provider = TryGetAssetProvider(providerGUID);
if (provider == null)
{
- if (_simulationOnEditor)
- provider = new DatabaseAssetProvider(this, providerGUID, assetInfo);
- else
- provider = new BundledAssetProvider(this, providerGUID, assetInfo);
+ provider = new AssetProvider(this, providerGUID, assetInfo);
provider.InitSpawnDebugInfo();
_providerDic.Add(providerGUID, provider);
OperationSystem.StartOperation(PackageName, provider);
@@ -161,18 +152,15 @@ namespace YooAsset
{
YooLogger.Error($"Failed to load sub assets ! {assetInfo.Error}");
CompletedProvider completedProvider = new CompletedProvider(this, assetInfo);
- completedProvider.SetCompleted(assetInfo.Error);
+ completedProvider.SetCompletedWithError(assetInfo.Error);
return completedProvider.CreateHandle();
}
string providerGUID = nameof(LoadSubAssetsAsync) + assetInfo.GUID;
- ProviderOperation provider = TryGetProvider(providerGUID);
+ ProviderOperation provider = TryGetAssetProvider(providerGUID);
if (provider == null)
{
- if (_simulationOnEditor)
- provider = new DatabaseSubAssetsProvider(this, providerGUID, assetInfo);
- else
- provider = new BundledSubAssetsProvider(this, providerGUID, assetInfo);
+ provider = new SubAssetsProvider(this, providerGUID, assetInfo);
provider.InitSpawnDebugInfo();
_providerDic.Add(providerGUID, provider);
OperationSystem.StartOperation(PackageName, provider);
@@ -191,18 +179,15 @@ namespace YooAsset
{
YooLogger.Error($"Failed to load all assets ! {assetInfo.Error}");
CompletedProvider completedProvider = new CompletedProvider(this, assetInfo);
- completedProvider.SetCompleted(assetInfo.Error);
+ completedProvider.SetCompletedWithError(assetInfo.Error);
return completedProvider.CreateHandle();
}
string providerGUID = nameof(LoadAllAssetsAsync) + assetInfo.GUID;
- ProviderOperation provider = TryGetProvider(providerGUID);
+ ProviderOperation provider = TryGetAssetProvider(providerGUID);
if (provider == null)
{
- if (_simulationOnEditor)
- provider = new DatabaseAllAssetsProvider(this, providerGUID, assetInfo);
- else
- provider = new BundledAllAssetsProvider(this, providerGUID, assetInfo);
+ provider = new AllAssetsProvider(this, providerGUID, assetInfo);
provider.InitSpawnDebugInfo();
_providerDic.Add(providerGUID, provider);
OperationSystem.StartOperation(PackageName, provider);
@@ -221,18 +206,15 @@ namespace YooAsset
{
YooLogger.Error($"Failed to load raw file ! {assetInfo.Error}");
CompletedProvider completedProvider = new CompletedProvider(this, assetInfo);
- completedProvider.SetCompleted(assetInfo.Error);
+ completedProvider.SetCompletedWithError(assetInfo.Error);
return completedProvider.CreateHandle();
}
string providerGUID = nameof(LoadRawFileAsync) + assetInfo.GUID;
- ProviderOperation provider = TryGetProvider(providerGUID);
+ ProviderOperation provider = TryGetAssetProvider(providerGUID);
if (provider == null)
{
- if (_simulationOnEditor)
- provider = new DatabaseRawFileProvider(this, providerGUID, assetInfo);
- else
- provider = new BundledRawFileProvider(this, providerGUID, assetInfo);
+ provider = new RawFileProvider(this, providerGUID, assetInfo);
provider.InitSpawnDebugInfo();
_providerDic.Add(providerGUID, provider);
OperationSystem.StartOperation(PackageName, provider);
@@ -295,20 +277,18 @@ namespace YooAsset
internal LoadBundleFileOperation CreateMainBundleFileLoader(AssetInfo assetInfo)
{
BundleInfo bundleInfo = _bundleQuery.GetMainBundleInfo(assetInfo);
- return CreateFileLoaderInternal(bundleInfo);
+ return CreateBundleFileLoaderInternal(bundleInfo);
}
- internal LoadDependBundleFileOperation CreateDependFileLoaders(AssetInfo assetInfo)
+ internal List CreateDependBundleFileLoaders(AssetInfo assetInfo)
{
BundleInfo[] bundleInfos = _bundleQuery.GetDependBundleInfos(assetInfo);
- List depends = new List(bundleInfos.Length);
+ List result = new List(bundleInfos.Length);
foreach (var bundleInfo in bundleInfos)
{
- LoadBundleFileOperation dependLoader = CreateFileLoaderInternal(bundleInfo);
- depends.Add(dependLoader);
+ var bundleLoader = CreateBundleFileLoaderInternal(bundleInfo);
+ result.Add(bundleLoader);
}
- var operation = new LoadDependBundleFileOperation(depends);
- OperationSystem.StartOperation(PackageName, operation);
- return operation;
+ return result;
}
internal void RemoveBundleProviders(List removeList)
{
@@ -322,11 +302,11 @@ namespace YooAsset
return _loaderDic.Count > 0;
}
- private LoadBundleFileOperation CreateFileLoaderInternal(BundleInfo bundleInfo)
+ private LoadBundleFileOperation CreateBundleFileLoaderInternal(BundleInfo bundleInfo)
{
// 如果加载器已经存在
string bundleName = bundleInfo.Bundle.BundleName;
- LoadBundleFileOperation loaderOperation = TryGetFileLoader(bundleName);
+ LoadBundleFileOperation loaderOperation = TryGetBundleFileLoader(bundleName);
if (loaderOperation != null)
return loaderOperation;
@@ -336,14 +316,14 @@ namespace YooAsset
_loaderDic.Add(bundleName, loaderOperation);
return loaderOperation;
}
- private LoadBundleFileOperation TryGetFileLoader(string bundleName)
+ private LoadBundleFileOperation TryGetBundleFileLoader(string bundleName)
{
if (_loaderDic.TryGetValue(bundleName, out LoadBundleFileOperation value))
return value;
else
return null;
}
- private ProviderOperation TryGetProvider(string providerGUID)
+ private ProviderOperation TryGetAssetProvider(string providerGUID)
{
if (_providerDic.TryGetValue(providerGUID, out ProviderOperation value))
return value;
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/BundleInfo.cs b/Assets/YooAsset/Runtime/ResourcePackage/BundleInfo.cs
index cec99558..b6bd1aff 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/BundleInfo.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/BundleInfo.cs
@@ -3,19 +3,14 @@ namespace YooAsset
{
internal class BundleInfo
{
- private readonly string _importFilePath;
private readonly IFileSystem _fileSystem;
+ private readonly string _importFilePath;
///
/// 资源包对象
///
public readonly PackageBundle Bundle;
- ///
- /// 注意:该字段只用于帮助编辑器下的模拟模式。
- ///
- public string[] IncludeAssetsInEditor;
-
public BundleInfo(IFileSystem fileSystem, PackageBundle bundle)
{
@@ -31,21 +26,13 @@ namespace YooAsset
}
///
- /// 加载资源文件
+ /// 加载资源包
///
public FSLoadBundleOperation LoadBundleFile()
{
return _fileSystem.LoadBundleFile(Bundle);
}
- ///
- /// 卸载资源文件
- ///
- public void UnloadBundleFile(object result)
- {
- _fileSystem.UnloadBundleFile(Bundle, result);
- }
-
///
/// 创建下载器
///
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/EBuildBundleType.cs b/Assets/YooAsset/Runtime/ResourcePackage/EBuildBundleType.cs
new file mode 100644
index 00000000..edb8f0d5
--- /dev/null
+++ b/Assets/YooAsset/Runtime/ResourcePackage/EBuildBundleType.cs
@@ -0,0 +1,26 @@
+
+namespace YooAsset
+{
+ internal enum EBuildBundleType
+ {
+ ///
+ /// 未知类型
+ ///
+ Unknown = 0,
+
+ ///
+ /// 虚拟资源包
+ ///
+ VirtualBundle = 1,
+
+ ///
+ /// AssetBundle
+ ///
+ AssetBundle = 2,
+
+ ///
+ /// 原生文件
+ ///
+ RawBundle = 3,
+ }
+}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/EBuildBundleType.cs.meta b/Assets/YooAsset/Runtime/ResourcePackage/EBuildBundleType.cs.meta
new file mode 100644
index 00000000..63df32c4
--- /dev/null
+++ b/Assets/YooAsset/Runtime/ResourcePackage/EBuildBundleType.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2ea43593e14f4fb469b0e9abe9a8434d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/ManifestTools.cs b/Assets/YooAsset/Runtime/ResourcePackage/ManifestTools.cs
index 417b1c78..02cbfae2 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/ManifestTools.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/ManifestTools.cs
@@ -39,6 +39,7 @@ namespace YooAsset
buffer.WriteBool(manifest.LocationToLower);
buffer.WriteBool(manifest.IncludeAssetGUID);
buffer.WriteInt32(manifest.OutputNameStyle);
+ buffer.WriteInt32(manifest.BuildBundleType);
buffer.WriteUTF8(manifest.BuildPipeline);
buffer.WriteUTF8(manifest.PackageName);
buffer.WriteUTF8(manifest.PackageVersion);
@@ -111,6 +112,7 @@ namespace YooAsset
manifest.LocationToLower = buffer.ReadBool();
manifest.IncludeAssetGUID = buffer.ReadBool();
manifest.OutputNameStyle = buffer.ReadInt32();
+ manifest.BuildBundleType = buffer.ReadInt32();
manifest.BuildPipeline = buffer.ReadUTF8();
manifest.PackageName = buffer.ReadUTF8();
manifest.PackageVersion = buffer.ReadUTF8();
@@ -122,7 +124,7 @@ namespace YooAsset
// 读取资源列表
int packageAssetCount = buffer.ReadInt32();
- manifest.AssetList = new List(packageAssetCount);
+ CreateAssetCollection(manifest, packageAssetCount);
for (int i = 0; i < packageAssetCount; i++)
{
var packageAsset = new PackageAsset();
@@ -131,12 +133,12 @@ namespace YooAsset
packageAsset.AssetGUID = buffer.ReadUTF8();
packageAsset.AssetTags = buffer.ReadUTF8Array();
packageAsset.BundleID = buffer.ReadInt32();
- manifest.AssetList.Add(packageAsset);
+ FillAssetCollection(manifest, packageAsset);
}
// 读取资源包列表
int packageBundleCount = buffer.ReadInt32();
- manifest.BundleList = new List(packageBundleCount);
+ CreateBundleCollection(manifest, packageBundleCount);
for (int i = 0; i < packageBundleCount; i++)
{
var packageBundle = new PackageBundle();
@@ -148,36 +150,129 @@ namespace YooAsset
packageBundle.Encrypted = buffer.ReadBool();
packageBundle.Tags = buffer.ReadUTF8Array();
packageBundle.DependIDs = buffer.ReadInt32Array();
- manifest.BundleList.Add(packageBundle);
+ FillBundleCollection(manifest, packageBundle);
}
}
- // 填充BundleDic
- manifest.BundleDic1 = new Dictionary(manifest.BundleList.Count);
- manifest.BundleDic2 = new Dictionary(manifest.BundleList.Count);
- foreach (var packageBundle in manifest.BundleList)
- {
- packageBundle.ParseBundle(manifest);
- manifest.BundleDic1.Add(packageBundle.BundleName, packageBundle);
- manifest.BundleDic2.Add(packageBundle.FileName, packageBundle);
- }
-
- // 填充AssetDic
- manifest.AssetDic = new Dictionary(manifest.AssetList.Count);
- foreach (var packageAsset in manifest.AssetList)
- {
- // 注意:我们不允许原始路径存在重名
- string assetPath = packageAsset.AssetPath;
- if (manifest.AssetDic.ContainsKey(assetPath))
- throw new Exception($"AssetPath have existed : {assetPath}");
- else
- manifest.AssetDic.Add(assetPath, packageAsset);
- }
-
+ // 初始化资源清单
+ InitManifest(manifest);
return manifest;
}
#endif
+ #region 解析资源清单辅助方法
+ public static void InitManifest(PackageManifest manifest)
+ {
+ // 填充资源包内包含的主资源列表
+ foreach (var packageAsset in manifest.AssetList)
+ {
+ int bundleID = packageAsset.BundleID;
+ if (bundleID >= 0 && bundleID < manifest.BundleList.Count)
+ {
+ var packageBundle = manifest.BundleList[bundleID];
+ packageBundle.IncludeMainAssets.Add(packageAsset);
+ }
+ else
+ {
+ throw new Exception($"Invalid bundle id : {bundleID} Asset path : {packageAsset.AssetPath}");
+ }
+ }
+ }
+
+ public static void CreateAssetCollection(PackageManifest manifest, int assetCount)
+ {
+ manifest.AssetList = new List(assetCount);
+ manifest.AssetDic = new Dictionary(assetCount);
+
+ if (manifest.EnableAddressable)
+ manifest.AssetPathMapping1 = new Dictionary(assetCount * 3);
+ else
+ manifest.AssetPathMapping1 = new Dictionary(assetCount * 2);
+
+ if (manifest.IncludeAssetGUID)
+ manifest.AssetPathMapping2 = new Dictionary(assetCount);
+ else
+ manifest.AssetPathMapping2 = new Dictionary();
+ }
+ public static void FillAssetCollection(PackageManifest manifest, PackageAsset packageAsset)
+ {
+ // 添加到列表集合
+ manifest.AssetList.Add(packageAsset);
+
+ // 注意:我们不允许原始路径存在重名
+ string assetPath = packageAsset.AssetPath;
+ if (manifest.AssetDic.ContainsKey(assetPath))
+ throw new System.Exception($"AssetPath have existed : {assetPath}");
+ else
+ manifest.AssetDic.Add(assetPath, packageAsset);
+
+ // 填充AssetPathMapping1
+ {
+ string location = packageAsset.AssetPath;
+ if (manifest.LocationToLower)
+ location = location.ToLower();
+
+ // 添加原生路径的映射
+ if (manifest.AssetPathMapping1.ContainsKey(location))
+ throw new System.Exception($"Location have existed : {location}");
+ else
+ manifest.AssetPathMapping1.Add(location, packageAsset.AssetPath);
+
+ // 添加无后缀名路径的映射
+ string locationWithoutExtension = Path.ChangeExtension(location, null);
+ if (ReferenceEquals(location, locationWithoutExtension) == false)
+ {
+ if (manifest.AssetPathMapping1.ContainsKey(locationWithoutExtension))
+ YooLogger.Warning($"Location have existed : {locationWithoutExtension}");
+ else
+ manifest.AssetPathMapping1.Add(locationWithoutExtension, packageAsset.AssetPath);
+ }
+ }
+
+ // 添加可寻址地址
+ if (manifest.EnableAddressable)
+ {
+ string location = packageAsset.Address;
+ if (string.IsNullOrEmpty(location) == false)
+ {
+ if (manifest.AssetPathMapping1.ContainsKey(location))
+ throw new System.Exception($"Location have existed : {location}");
+ else
+ manifest.AssetPathMapping1.Add(location, packageAsset.AssetPath);
+ }
+ }
+
+ // 填充AssetPathMapping2
+ if (manifest.IncludeAssetGUID)
+ {
+ if (manifest.AssetPathMapping2.ContainsKey(packageAsset.AssetGUID))
+ throw new System.Exception($"AssetGUID have existed : {packageAsset.AssetGUID}");
+ else
+ manifest.AssetPathMapping2.Add(packageAsset.AssetGUID, packageAsset.AssetPath);
+ }
+ }
+
+ public static void CreateBundleCollection(PackageManifest manifest, int bundleCount)
+ {
+ manifest.BundleList = new List(bundleCount);
+ manifest.BundleDic1 = new Dictionary(bundleCount);
+ manifest.BundleDic2 = new Dictionary(bundleCount);
+ manifest.BundleDic3 = new Dictionary(bundleCount);
+ }
+ public static void FillBundleCollection(PackageManifest manifest, PackageBundle packageBundle)
+ {
+ // 初始化资源包
+ packageBundle.InitBundle(manifest);
+
+ // 添加到列表集合
+ manifest.BundleList.Add(packageBundle);
+
+ manifest.BundleDic1.Add(packageBundle.BundleName, packageBundle);
+ manifest.BundleDic2.Add(packageBundle.FileName, packageBundle);
+ manifest.BundleDic3.Add(packageBundle.BundleGUID, packageBundle);
+ }
+ #endregion
+
///
/// 注意:该类拷贝自编辑器
///
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/DeserializeManifestOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/DeserializeManifestOperation.cs
index 7b2a54b2..c28017a6 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/DeserializeManifestOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/Internal/DeserializeManifestOperation.cs
@@ -1,6 +1,7 @@
using System.IO;
using System.Collections;
using System.Collections.Generic;
+using System;
namespace YooAsset
{
@@ -14,6 +15,7 @@ namespace YooAsset
DeserializeAssetList,
PrepareBundleList,
DeserializeBundleList,
+ InitManifest,
Done,
}
@@ -80,6 +82,7 @@ namespace YooAsset
Manifest.LocationToLower = _buffer.ReadBool();
Manifest.IncludeAssetGUID = _buffer.ReadBool();
Manifest.OutputNameStyle = _buffer.ReadInt32();
+ Manifest.BuildBundleType = _buffer.ReadInt32();
Manifest.BuildPipeline = _buffer.ReadUTF8();
Manifest.PackageName = _buffer.ReadUTF8();
Manifest.PackageVersion = _buffer.ReadUTF8();
@@ -95,20 +98,8 @@ namespace YooAsset
if (_steps == ESteps.PrepareAssetList)
{
_packageAssetCount = _buffer.ReadInt32();
- Manifest.AssetList = new List(_packageAssetCount);
- Manifest.AssetDic = new Dictionary(_packageAssetCount);
-
- if (Manifest.EnableAddressable)
- Manifest.AssetPathMapping1 = new Dictionary(_packageAssetCount * 3);
- else
- Manifest.AssetPathMapping1 = new Dictionary(_packageAssetCount * 2);
-
- if (Manifest.IncludeAssetGUID)
- Manifest.AssetPathMapping2 = new Dictionary(_packageAssetCount);
- else
- Manifest.AssetPathMapping2 = new Dictionary();
-
_progressTotalValue = _packageAssetCount;
+ ManifestTools.CreateAssetCollection(Manifest, _packageAssetCount);
_steps = ESteps.DeserializeAssetList;
}
if (_steps == ESteps.DeserializeAssetList)
@@ -121,57 +112,7 @@ namespace YooAsset
packageAsset.AssetGUID = _buffer.ReadUTF8();
packageAsset.AssetTags = _buffer.ReadUTF8Array();
packageAsset.BundleID = _buffer.ReadInt32();
- Manifest.AssetList.Add(packageAsset);
-
- // 注意:我们不允许原始路径存在重名
- string assetPath = packageAsset.AssetPath;
- if (Manifest.AssetDic.ContainsKey(assetPath))
- throw new System.Exception($"AssetPath have existed : {assetPath}");
- else
- Manifest.AssetDic.Add(assetPath, packageAsset);
-
- // 填充AssetPathMapping1
- {
- string location = packageAsset.AssetPath;
- if (Manifest.LocationToLower)
- location = location.ToLower();
-
- // 添加原生路径的映射
- if (Manifest.AssetPathMapping1.ContainsKey(location))
- throw new System.Exception($"Location have existed : {location}");
- else
- Manifest.AssetPathMapping1.Add(location, packageAsset.AssetPath);
-
- // 添加无后缀名路径的映射
- string locationWithoutExtension = Path.ChangeExtension(location, null);
- if (ReferenceEquals(location, locationWithoutExtension) == false)
- {
- if (Manifest.AssetPathMapping1.ContainsKey(locationWithoutExtension))
- YooLogger.Warning($"Location have existed : {locationWithoutExtension}");
- else
- Manifest.AssetPathMapping1.Add(locationWithoutExtension, packageAsset.AssetPath);
- }
- }
- if (Manifest.EnableAddressable)
- {
- string location = packageAsset.Address;
- if (string.IsNullOrEmpty(location) == false)
- {
- if (Manifest.AssetPathMapping1.ContainsKey(location))
- throw new System.Exception($"Location have existed : {location}");
- else
- Manifest.AssetPathMapping1.Add(location, packageAsset.AssetPath);
- }
- }
-
- // 填充AssetPathMapping2
- if (Manifest.IncludeAssetGUID)
- {
- if (Manifest.AssetPathMapping2.ContainsKey(packageAsset.AssetGUID))
- throw new System.Exception($"AssetGUID have existed : {packageAsset.AssetGUID}");
- else
- Manifest.AssetPathMapping2.Add(packageAsset.AssetGUID, packageAsset.AssetPath);
- }
+ ManifestTools.FillAssetCollection(Manifest, packageAsset);
_packageAssetCount--;
Progress = 1f - _packageAssetCount / _progressTotalValue;
@@ -188,11 +129,8 @@ namespace YooAsset
if (_steps == ESteps.PrepareBundleList)
{
_packageBundleCount = _buffer.ReadInt32();
- Manifest.BundleList = new List(_packageBundleCount);
- Manifest.BundleDic1 = new Dictionary(_packageBundleCount);
- Manifest.BundleDic2 = new Dictionary(_packageBundleCount);
- Manifest.BundleDic3 = new Dictionary(_packageBundleCount);
_progressTotalValue = _packageBundleCount;
+ ManifestTools.CreateBundleCollection(Manifest, _packageBundleCount);
_steps = ESteps.DeserializeBundleList;
}
if (_steps == ESteps.DeserializeBundleList)
@@ -208,14 +146,7 @@ namespace YooAsset
packageBundle.Encrypted = _buffer.ReadBool();
packageBundle.Tags = _buffer.ReadUTF8Array();
packageBundle.DependIDs = _buffer.ReadInt32Array();
- packageBundle.ParseBundle(Manifest);
- Manifest.BundleList.Add(packageBundle);
- Manifest.BundleDic1.Add(packageBundle.BundleName, packageBundle);
- Manifest.BundleDic2.Add(packageBundle.FileName, packageBundle);
-
- // 注意:原始文件可能存在相同的BundleGUID
- if (Manifest.BundleDic3.ContainsKey(packageBundle.BundleGUID) == false)
- Manifest.BundleDic3.Add(packageBundle.BundleGUID, packageBundle);
+ ManifestTools.FillBundleCollection(Manifest, packageBundle);
_packageBundleCount--;
Progress = 1f - _packageBundleCount / _progressTotalValue;
@@ -225,10 +156,16 @@ namespace YooAsset
if (_packageBundleCount <= 0)
{
- _steps = ESteps.Done;
- Status = EOperationStatus.Succeed;
+ _steps = ESteps.InitManifest;
}
}
+
+ if (_steps == ESteps.InitManifest)
+ {
+ ManifestTools.InitManifest(Manifest);
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Succeed;
+ }
}
catch (System.Exception e)
{
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PackageAsset.cs b/Assets/YooAsset/Runtime/ResourcePackage/PackageAsset.cs
index edfe4cc2..fb5d40b7 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/PackageAsset.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/PackageAsset.cs
@@ -31,6 +31,12 @@ namespace YooAsset
///
public int BundleID;
+ ///
+ /// 所属资源包名称(仅编辑器有效)
+ ///
+ [NonSerialized]
+ public string BundleNameInEditor;
+
///
/// 是否包含Tag
///
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PackageBundle.cs b/Assets/YooAsset/Runtime/ResourcePackage/PackageBundle.cs
index 8efbd0f7..61060978 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/PackageBundle.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/PackageBundle.cs
@@ -1,5 +1,6 @@
using System;
using System.Linq;
+using System.Collections.Generic;
namespace YooAsset
{
@@ -46,17 +47,6 @@ namespace YooAsset
///
public int[] DependIDs;
-
- ///
- /// 所属的包裹名称
- ///
- public string PackageName { private set; get; }
-
- ///
- /// 所属的构建管线
- ///
- public string BuildPipeline { private set; get; }
-
///
/// 资源包GUID
///
@@ -65,6 +55,18 @@ namespace YooAsset
get { return FileHash; }
}
+ ///
+ /// 资源包类型
+ ///
+ private int _bundleType;
+ public int BundleType
+ {
+ get
+ {
+ return _bundleType;
+ }
+ }
+
///
/// 文件名称
///
@@ -93,18 +95,23 @@ namespace YooAsset
}
}
+ ///
+ /// 包含的主资源集合
+ ///
+ [NonSerialized]
+ public readonly List IncludeMainAssets = new List(10);
+
public PackageBundle()
{
}
///
- /// 解析资源包
+ /// 初始化资源包
///
- public void ParseBundle(PackageManifest manifest)
+ public void InitBundle(PackageManifest manifest)
{
- PackageName = manifest.PackageName;
- BuildPipeline = manifest.BuildPipeline;
+ _bundleType = manifest.BuildBundleType;
_fileExtension = ManifestTools.GetRemoteBundleFileExtension(BundleName);
_fileName = ManifestTools.GetRemoteBundleFileName(manifest.OutputNameStyle, BundleName, _fileExtension, FileHash);
}
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PackageDetail.cs b/Assets/YooAsset/Runtime/ResourcePackage/PackageDetail.cs
index 67de00c3..bd4c5c87 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/PackageDetail.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/PackageDetail.cs
@@ -28,6 +28,11 @@ namespace YooAsset
///
public int OutputNameStyle;
+ ///
+ /// 构建资源包类型
+ ///
+ public int BuildBundleType;
+
///
/// 构建管线名称
///
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs b/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs
index 50c58e4f..cb2cbf7f 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs
@@ -37,6 +37,11 @@ namespace YooAsset
///
public int OutputNameStyle;
+ ///
+ /// 构建资源包类型
+ ///
+ public int BuildBundleType;
+
///
/// 构建管线名称
///
@@ -67,6 +72,23 @@ namespace YooAsset
///
public List BundleList = new List();
+ ///
+ /// 资源映射集合(提供AssetPath获取PackageAsset)
+ ///
+ [NonSerialized]
+ public Dictionary AssetDic;
+
+ ///
+ /// 资源路径映射集合(提供Location获取AssetPath)
+ ///
+ [NonSerialized]
+ public Dictionary AssetPathMapping1;
+
+ ///
+ /// 资源路径映射集合(提供AssetGUID获取AssetPath)
+ ///
+ [NonSerialized]
+ public Dictionary AssetPathMapping2;
///
/// 资源包集合(提供BundleName获取PackageBundle)
@@ -86,24 +108,6 @@ namespace YooAsset
[NonSerialized]
public Dictionary BundleDic3;
- ///
- /// 资源映射集合(提供AssetPath获取PackageAsset)
- ///
- [NonSerialized]
- public Dictionary AssetDic;
-
- ///
- /// 资源路径映射集合(提供Location获取AssetPath)
- ///
- [NonSerialized]
- public Dictionary AssetPathMapping1;
-
- ///
- /// 资源路径映射集合(提供AssetGUID获取AssetPath)
- ///
- [NonSerialized]
- public Dictionary AssetPathMapping2;
-
///
/// 获取包裹的详细信息
@@ -116,6 +120,7 @@ namespace YooAsset
details.LocationToLower = LocationToLower;
details.IncludeAssetGUID = IncludeAssetGUID;
details.OutputNameStyle = OutputNameStyle;
+ details.BuildBundleType = BuildBundleType;
details.BuildPipeline = BuildPipeline;
details.PackageName = PackageName;
details.PackageVersion = PackageVersion;
@@ -357,25 +362,6 @@ namespace YooAsset
}
}
- ///
- /// 获取资源包内的主资源列表
- ///
- public string[] GetBundleIncludeAssets(string assetPath)
- {
- List assetList = new List();
- if (TryGetPackageAsset(assetPath, out PackageAsset result))
- {
- foreach (var packageAsset in AssetList)
- {
- if (packageAsset.BundleID == result.BundleID)
- {
- assetList.Add(packageAsset.AssetPath);
- }
- }
- }
- return assetList.ToArray();
- }
-
#region 调试方法
[Conditional("DEBUG")]
private void DebugCheckLocation(string location)
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/EditorSimulateBuildParam.cs b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/EditorSimulateBuildParam.cs
index 2a94b901..a946f3b4 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/EditorSimulateBuildParam.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/EditorSimulateBuildParam.cs
@@ -3,6 +3,14 @@ namespace YooAsset
{
public class EditorSimulateBuildParam
{
+ ///
+ /// 包裹名称
+ ///
public string PackageName;
+
+ ///
+ /// 模拟构建管线名称
+ ///
+ public string BuildPipelineName = "EditorSimulateBuildPipeline";
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/EditorSimulateModeImpl.cs b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/EditorSimulateModeImpl.cs
index aec77f30..be08ca09 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/EditorSimulateModeImpl.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/EditorSimulateModeImpl.cs
@@ -106,7 +106,6 @@ namespace YooAsset
if (EditorFileSystem.Belong(packageBundle))
{
BundleInfo bundleInfo = new BundleInfo(EditorFileSystem, packageBundle);
- bundleInfo.IncludeAssetsInEditor = ActiveManifest.GetBundleIncludeAssets(assetInfo.AssetPath);
return bundleInfo;
}
diff --git a/Assets/YooAsset/Runtime/Services/IDecryptionServices.cs b/Assets/YooAsset/Runtime/Services/IDecryptionServices.cs
index bf58ecfa..1e954a3e 100644
--- a/Assets/YooAsset/Runtime/Services/IDecryptionServices.cs
+++ b/Assets/YooAsset/Runtime/Services/IDecryptionServices.cs
@@ -20,20 +20,36 @@ namespace YooAsset
///
public uint FileLoadCRC;
}
+ public struct DecryptResult
+ {
+ ///
+ /// 资源包对象
+ ///
+ public AssetBundle Result;
+
+ ///
+ /// 异步请求句柄
+ ///
+ public AssetBundleCreateRequest CreateRequest;
+
+ ///
+ /// 托管流对象
+ /// 注意:流对象在资源包对象释放的时候会自动释放
+ ///
+ public Stream ManagedStream;
+ }
public interface IDecryptionServices
{
///
/// 同步方式获取解密的资源包对象
- /// 注意:加载流对象在资源包对象释放的时候会自动释放
///
- AssetBundle LoadAssetBundle(DecryptFileInfo fileInfo, out Stream managedStream);
+ DecryptResult LoadAssetBundle(DecryptFileInfo fileInfo);
///
/// 异步方式获取解密的资源包对象
- /// 注意:加载流对象在资源包对象释放的时候会自动释放
///
- AssetBundleCreateRequest LoadAssetBundleAsync(DecryptFileInfo fileInfo, out Stream managedStream);
+ DecryptResult LoadAssetBundleAsync(DecryptFileInfo fileInfo);
///
/// 获取解密的字节数据