diff --git a/Assets/YooAsset/Runtime/InitializeParameters.cs b/Assets/YooAsset/Runtime/InitializeParameters.cs
index 058330d1..b3ef0b09 100644
--- a/Assets/YooAsset/Runtime/InitializeParameters.cs
+++ b/Assets/YooAsset/Runtime/InitializeParameters.cs
@@ -43,6 +43,11 @@ namespace YooAsset
///
public int BundleLoadingMaxConcurrency = int.MaxValue;
+ ///
+ /// 当资源引用计数为零的时候自动释放资源包
+ ///
+ public bool AutoUnloadBundleWhenUnused = false;
+
///
/// WebGL平台强制同步加载资源对象
///
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Handle/HandleBase.cs b/Assets/YooAsset/Runtime/ResourceManager/Handle/HandleBase.cs
index 5c3fb267..26100cb5 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Handle/HandleBase.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Handle/HandleBase.cs
@@ -23,6 +23,11 @@ namespace YooAsset
if (IsValidWithWarning == false)
return;
Provider.ReleaseHandle(this);
+
+ // 主动卸载零引用的资源包
+ if (Provider.RefCount == 0)
+ Provider.TryUnloadBundle();
+
Provider = null;
}
@@ -146,11 +151,11 @@ namespace YooAsset
///
public System.Threading.Tasks.Task Task
{
- get
+ get
{
if (IsValidWithWarning == false)
return null;
- return Provider.Task;
+ return Provider.Task;
}
}
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/ProviderOperation.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/ProviderOperation.cs
index 02e63576..462eaeff 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Provider/ProviderOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/ProviderOperation.cs
@@ -308,6 +308,17 @@ namespace YooAsset
}
}
+ ///
+ /// 尝试卸载资源包
+ ///
+ public void TryUnloadBundle()
+ {
+ if (_resManager.AutoUnloadBundleWhenUnused)
+ {
+ _resManager.TryUnloadUnusedAsset(MainAssetInfo, 10);
+ }
+ }
+
///
/// 结束流程
///
diff --git a/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs b/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs
index baeb02c1..9eae02af 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs
@@ -17,6 +17,7 @@ namespace YooAsset
private int _bundleLoadingMaxConcurrency;
// 开发者配置选项
+ public bool AutoUnloadBundleWhenUnused { private set; get; }
public bool WebGLForceSyncLoadAsset { private set; get; }
public bool UseWeakReferenceHandle { private set; get; }
@@ -47,6 +48,7 @@ namespace YooAsset
public void Initialize(InitializeParameters parameters, IBundleQuery bundleServices)
{
_bundleLoadingMaxConcurrency = parameters.BundleLoadingMaxConcurrency;
+ AutoUnloadBundleWhenUnused = parameters.AutoUnloadBundleWhenUnused;
WebGLForceSyncLoadAsset = parameters.WebGLForceSyncLoadAsset;
UseWeakReferenceHandle = parameters.UseWeakReferenceHandle;
_bundleQuery = bundleServices;