This commit is contained in:
何冠峰
2025-07-01 18:10:17 +08:00
parent 53163a75ae
commit 090e4f4b15
2 changed files with 31 additions and 26 deletions

View File

@@ -60,7 +60,7 @@ namespace YooAsset
/// <summary> /// <summary>
/// 尝试卸载指定资源的资源包(包括依赖资源) /// 尝试卸载指定资源的资源包(包括依赖资源)
/// </summary> /// </summary>
public void TryUnloadUnusedAsset(AssetInfo assetInfo) public void TryUnloadUnusedAsset(AssetInfo assetInfo, int loopCount)
{ {
if (assetInfo.IsInvalid) if (assetInfo.IsInvalid)
{ {
@@ -68,34 +68,39 @@ namespace YooAsset
return; return;
} }
// 卸载主资源包加载器 while (loopCount > 0)
string mainBundleName = _bundleQuery.GetMainBundleName(assetInfo);
var mainLoader = TryGetBundleFileLoader(mainBundleName);
if (mainLoader != null)
{ {
mainLoader.TryDestroyProviders(); loopCount--;
if (mainLoader.CanDestroyLoader())
{
string bundleName = mainLoader.LoadBundleInfo.Bundle.BundleName;
mainLoader.DestroyLoader();
LoaderDic.Remove(bundleName);
}
}
// 卸载依赖资源包加载器 // 卸载资源包加载器
string[] dependBundleNames = _bundleQuery.GetDependBundleNames(assetInfo); string mainBundleName = _bundleQuery.GetMainBundleName(assetInfo);
foreach (var dependBundleName in dependBundleNames) var mainLoader = TryGetBundleFileLoader(mainBundleName);
{ if (mainLoader != null)
var dependLoader = TryGetBundleFileLoader(dependBundleName);
if (dependLoader != null)
{ {
if (dependLoader.CanDestroyLoader()) mainLoader.TryDestroyProviders();
if (mainLoader.CanDestroyLoader())
{ {
string bundleName = dependLoader.LoadBundleInfo.Bundle.BundleName; string bundleName = mainLoader.LoadBundleInfo.Bundle.BundleName;
dependLoader.DestroyLoader(); mainLoader.DestroyLoader();
LoaderDic.Remove(bundleName); 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);
}
}
}
} }
} }

View File

@@ -361,21 +361,21 @@ namespace YooAsset
/// 资源回收 /// 资源回收
/// 说明:尝试卸载指定的资源 /// 说明:尝试卸载指定的资源
/// </summary> /// </summary>
public void TryUnloadUnusedAsset(string location) public void TryUnloadUnusedAsset(string location, int loopCount = 10)
{ {
DebugCheckInitialize(); DebugCheckInitialize();
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null); AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null);
_resourceManager.TryUnloadUnusedAsset(assetInfo); _resourceManager.TryUnloadUnusedAsset(assetInfo, loopCount);
} }
/// <summary> /// <summary>
/// 资源回收 /// 资源回收
/// 说明:尝试卸载指定的资源 /// 说明:尝试卸载指定的资源
/// </summary> /// </summary>
public void TryUnloadUnusedAsset(AssetInfo assetInfo) public void TryUnloadUnusedAsset(AssetInfo assetInfo, int loopCount = 10)
{ {
DebugCheckInitialize(); DebugCheckInitialize();
_resourceManager.TryUnloadUnusedAsset(assetInfo); _resourceManager.TryUnloadUnusedAsset(assetInfo, loopCount);
} }
#endregion #endregion