From a62f8085918999bf75ae8cae2a58c5e8a5955373 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= Date: Wed, 12 Mar 2025 16:36:37 +0800 Subject: [PATCH] fix #506 --- .../Runtime/ResourcePackage/AssetInfo.cs | 15 +++++++++++++++ .../Runtime/ResourcePackage/PackageManifest.cs | 17 ++++++++++++++++- .../ResourcePackage/PlayMode/PlayModeImpl.cs | 12 +++++++++++- .../Runtime/ResourcePackage/ResourcePackage.cs | 4 ++++ 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/Assets/YooAsset/Runtime/ResourcePackage/AssetInfo.cs b/Assets/YooAsset/Runtime/ResourcePackage/AssetInfo.cs index d5cdb1af..6ff83be6 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/AssetInfo.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/AssetInfo.cs @@ -3,6 +3,16 @@ namespace YooAsset { public class AssetInfo { + internal enum ELoadMethod + { + None = 0, + LoadAsset, + LoadSubAssets, + LoadAllAssets, + LoadScene, + LoadRawFile, + } + private readonly PackageAsset _packageAsset; private string _providerGUID; @@ -21,6 +31,11 @@ namespace YooAsset /// public string Error { private set; get; } + /// + /// 加载方法 + /// + internal ELoadMethod LoadMethod; + /// /// 资源对象 /// diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs b/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs index 66454833..0640d284 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/PackageManifest.cs @@ -174,7 +174,7 @@ namespace YooAsset } /// - /// 获取资源依赖列表 + /// 获取依赖列表 /// 注意:传入的资源对象一定合法有效! /// public PackageBundle[] GetAllDependencies(PackageAsset packageAsset) @@ -188,6 +188,21 @@ namespace YooAsset return result.ToArray(); } + /// + /// 获取依赖列表 + /// 注意:传入的资源包对象一定合法有效! + /// + public PackageBundle[] GetAllDependencies(PackageBundle packageBundle) + { + List result = new List(packageBundle.DependBundleIDs.Length); + foreach (var dependID in packageBundle.DependBundleIDs) + { + var dependBundle = GetMainPackageBundle(dependID); + result.Add(dependBundle); + } + return result.ToArray(); + } + /// /// 尝试获取包裹的资源 /// diff --git a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/PlayModeImpl.cs b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/PlayModeImpl.cs index b0c306a8..7fec55a4 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/PlayModeImpl.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/PlayMode/PlayModeImpl.cs @@ -176,7 +176,17 @@ namespace YooAsset throw new Exception("Should never get here !"); // 注意:如果清单里未找到资源包会抛出异常! - var depends = ActiveManifest.GetAllDependencies(assetInfo.Asset); + PackageBundle[] depends; + if (assetInfo.LoadMethod == AssetInfo.ELoadMethod.LoadAllAssets) + { + var mainBundle = ActiveManifest.GetMainPackageBundle(assetInfo.Asset); + depends = ActiveManifest.GetAllDependencies(mainBundle); + } + else + { + depends = ActiveManifest.GetAllDependencies(assetInfo.Asset); + } + List result = new List(depends.Length); foreach (var packageBundle in depends) { diff --git a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs index d38d7274..020f61d9 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs @@ -610,6 +610,7 @@ namespace YooAsset private SceneHandle LoadSceneInternal(AssetInfo assetInfo, bool waitForAsyncComplete, LoadSceneMode sceneMode, LocalPhysicsMode physicsMode, bool suspendLoad, uint priority) { DebugCheckAssetLoadType(assetInfo.AssetType); + assetInfo.LoadMethod = AssetInfo.ELoadMethod.LoadScene; var loadSceneParams = new LoadSceneParameters(sceneMode, physicsMode); var handle = _resourceManager.LoadSceneAsync(assetInfo, loadSceneParams, suspendLoad, priority); if (waitForAsyncComplete) @@ -720,6 +721,7 @@ namespace YooAsset private AssetHandle LoadAssetInternal(AssetInfo assetInfo, bool waitForAsyncComplete, uint priority) { DebugCheckAssetLoadType(assetInfo.AssetType); + assetInfo.LoadMethod = AssetInfo.ELoadMethod.LoadAsset; var handle = _resourceManager.LoadAssetAsync(assetInfo, priority); if (waitForAsyncComplete) handle.WaitForAsyncComplete(); @@ -829,6 +831,7 @@ namespace YooAsset private SubAssetsHandle LoadSubAssetsInternal(AssetInfo assetInfo, bool waitForAsyncComplete, uint priority) { DebugCheckAssetLoadType(assetInfo.AssetType); + assetInfo.LoadMethod = AssetInfo.ELoadMethod.LoadSubAssets; var handle = _resourceManager.LoadSubAssetsAsync(assetInfo, priority); if (waitForAsyncComplete) handle.WaitForAsyncComplete(); @@ -938,6 +941,7 @@ namespace YooAsset private AllAssetsHandle LoadAllAssetsInternal(AssetInfo assetInfo, bool waitForAsyncComplete, uint priority) { DebugCheckAssetLoadType(assetInfo.AssetType); + assetInfo.LoadMethod = AssetInfo.ELoadMethod.LoadAllAssets; var handle = _resourceManager.LoadAllAssetsAsync(assetInfo, priority); if (waitForAsyncComplete) handle.WaitForAsyncComplete();