diff --git a/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs b/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs index 1b36583d..5d8c2666 100644 --- a/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs +++ b/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs @@ -60,7 +60,7 @@ namespace YooAsset /// /// 尝试卸载指定资源的资源包(包括依赖资源) /// - public void TryUnloadUnusedAsset(AssetInfo assetInfo) + public void TryUnloadUnusedAsset(AssetInfo assetInfo, int loopCount) { if (assetInfo.IsInvalid) { @@ -68,34 +68,39 @@ namespace YooAsset return; } - // 卸载主资源包加载器 - string mainBundleName = _bundleQuery.GetMainBundleName(assetInfo); - var mainLoader = TryGetBundleFileLoader(mainBundleName); - if (mainLoader != null) + while (loopCount > 0) { - mainLoader.TryDestroyProviders(); - if (mainLoader.CanDestroyLoader()) - { - string bundleName = mainLoader.LoadBundleInfo.Bundle.BundleName; - mainLoader.DestroyLoader(); - LoaderDic.Remove(bundleName); - } - } + loopCount--; - // 卸载依赖资源包加载器 - string[] dependBundleNames = _bundleQuery.GetDependBundleNames(assetInfo); - foreach (var dependBundleName in dependBundleNames) - { - var dependLoader = TryGetBundleFileLoader(dependBundleName); - if (dependLoader != null) + // 卸载主资源包加载器 + string mainBundleName = _bundleQuery.GetMainBundleName(assetInfo); + var mainLoader = TryGetBundleFileLoader(mainBundleName); + if (mainLoader != null) { - if (dependLoader.CanDestroyLoader()) + mainLoader.TryDestroyProviders(); + if (mainLoader.CanDestroyLoader()) { - string bundleName = dependLoader.LoadBundleInfo.Bundle.BundleName; - dependLoader.DestroyLoader(); + string bundleName = mainLoader.LoadBundleInfo.Bundle.BundleName; + mainLoader.DestroyLoader(); LoaderDic.Remove(bundleName); } } + + // 卸载依赖资源包加载器 + string[] dependBundleNames = _bundleQuery.GetDependBundleNames(assetInfo); + foreach (var dependBundleName in dependBundleNames) + { + var dependLoader = TryGetBundleFileLoader(dependBundleName); + if (dependLoader != null) + { + if (dependLoader.CanDestroyLoader()) + { + string bundleName = dependLoader.LoadBundleInfo.Bundle.BundleName; + dependLoader.DestroyLoader(); + LoaderDic.Remove(bundleName); + } + } + } } } diff --git a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs index 055a5e6c..3a8c0256 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs @@ -361,21 +361,21 @@ namespace YooAsset /// 资源回收 /// 说明:尝试卸载指定的资源 /// - public void TryUnloadUnusedAsset(string location) + public void TryUnloadUnusedAsset(string location, int loopCount = 10) { DebugCheckInitialize(); AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null); - _resourceManager.TryUnloadUnusedAsset(assetInfo); + _resourceManager.TryUnloadUnusedAsset(assetInfo, loopCount); } /// /// 资源回收 /// 说明:尝试卸载指定的资源 /// - public void TryUnloadUnusedAsset(AssetInfo assetInfo) + public void TryUnloadUnusedAsset(AssetInfo assetInfo, int loopCount = 10) { DebugCheckInitialize(); - _resourceManager.TryUnloadUnusedAsset(assetInfo); + _resourceManager.TryUnloadUnusedAsset(assetInfo, loopCount); } #endregion