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();