diff --git a/Editor/Resource/Inspector/ResourceComponentInspector.cs b/Editor/Resource/Inspector/ResourceComponentInspector.cs
index c4f56e8..111c328 100644
--- a/Editor/Resource/Inspector/ResourceComponentInspector.cs
+++ b/Editor/Resource/Inspector/ResourceComponentInspector.cs
@@ -32,6 +32,7 @@ namespace AlicizaX.Resource.Editor
private SerializedProperty _packageName = null;
private SerializedProperty _decryptionServices = null;
private SerializedProperty _playMode = null;
+ private SerializedProperty _autoUnloadBundleWhenUnused = null;
private int _packageNameIndex = 0;
private string[] _packageNames;
@@ -101,6 +102,7 @@ namespace AlicizaX.Resource.Editor
}
}
+ EditorGUILayout.PropertyField(_autoUnloadBundleWhenUnused);
EditorGUILayout.PropertyField(_useSystemUnloadUnusedAssets);
float minUnloadUnusedAssetsInterval =
@@ -245,8 +247,9 @@ namespace AlicizaX.Resource.Editor
_downloadingMaxNum = serializedObject.FindProperty("downloadingMaxNum");
_failedTryAgain = serializedObject.FindProperty("failedTryAgain");
_packageName = serializedObject.FindProperty("packageName");
- _decryptionServices = serializedObject.FindProperty("_decryptionServices");
+ _decryptionServices = serializedObject.FindProperty("decryptionServices");
_playMode = serializedObject.FindProperty("_playMode");
+ _autoUnloadBundleWhenUnused = serializedObject.FindProperty("autoUnloadBundleWhenUnused");
RefreshDecryptionServices();
RefreshTypeNames();
_playModeIndex = EditorPrefs.GetInt(ResourceComponent.PrefsKey, 0);
diff --git a/Runtime/Resource/Resource/IResourceModule.cs b/Runtime/Resource/Resource/IResourceModule.cs
index 2c2e5e5..f73f9cf 100644
--- a/Runtime/Resource/Resource/IResourceModule.cs
+++ b/Runtime/Resource/Resource/IResourceModule.cs
@@ -10,7 +10,7 @@ namespace AlicizaX.Resource.Runtime
///
/// 资源管理器接口。
///
- public interface IResourceModule:IModule
+ public interface IResourceModule : IModule
{
///
/// 获取当前资源适用的游戏版本号。
@@ -29,6 +29,10 @@ namespace AlicizaX.Resource.Runtime
string DecryptionServices { get; set; }
+ ///
+ /// 自动释放资源引用计数为0的资源包
+ ///
+ bool AutoUnloadBundleWhenUnused { get; set; }
///
/// 同时下载的最大数目。
@@ -46,7 +50,7 @@ namespace AlicizaX.Resource.Runtime
void Initialize();
- UniTask InitPackageAsync(string packageName="", string hostServerURL = "", string fallbackHostServerURL = "");
+ UniTask InitPackageAsync(string packageName = "", string hostServerURL = "", string fallbackHostServerURL = "");
///
/// 默认资源包名称。
diff --git a/Runtime/Resource/Resource/ResourceComponent.cs b/Runtime/Resource/Resource/ResourceComponent.cs
index 815922a..ffba1ff 100644
--- a/Runtime/Resource/Resource/ResourceComponent.cs
+++ b/Runtime/Resource/Resource/ResourceComponent.cs
@@ -34,7 +34,13 @@ namespace AlicizaX.Resource.Runtime
[SerializeField] private bool useSystemUnloadUnusedAssets = true;
- [SerializeField] private string _decryptionServices = "";
+ [SerializeField] private string decryptionServices = "";
+
+ ///
+ /// 自动释放资源引用计数为0的资源包
+ ///
+ [SerializeField] public bool autoUnloadBundleWhenUnused = false;
+
[SerializeField] private EPlayMode _playMode = EPlayMode.EditorSimulateMode;
///
@@ -194,7 +200,8 @@ namespace AlicizaX.Resource.Runtime
_playMode = (EPlayMode)UnityEditor.EditorPrefs.GetInt(ResourceComponent.PrefsKey, 0);
#endif
_resourceModule.DefaultPackageName = PackageName;
- _resourceModule.DecryptionServices = _decryptionServices;
+ _resourceModule.DecryptionServices = decryptionServices;
+ _resourceModule.AutoUnloadBundleWhenUnused = autoUnloadBundleWhenUnused;
_resourceModule.PlayMode = _playMode;
_resourceModule.Milliseconds = milliseconds;
_resourceModule.DownloadingMaxNum = DownloadingMaxNum;
diff --git a/Runtime/Resource/Resource/ResourceModule.Initialization.cs b/Runtime/Resource/Resource/ResourceModule.Initialization.cs
index ea40b11..7c89242 100644
--- a/Runtime/Resource/Resource/ResourceModule.Initialization.cs
+++ b/Runtime/Resource/Resource/ResourceModule.Initialization.cs
@@ -13,33 +13,39 @@ namespace AlicizaX.Resource.Runtime
private InitializationOperation CreateInitializationOperationHandler(ResourcePackage resourcePackage, string hostServerURL, string fallbackHostServerURL, string decryptionServicesName)
{
IDecryptionServices decryptionServices = CreateDecryptionServices(decryptionServicesName);
+ InitializeParameters initializeParameters = null;
switch (PlayMode)
{
case EPlayMode.EditorSimulateMode:
{
- // 编辑器下的模拟模式
- return InitializeYooAssetEditorSimulateMode(resourcePackage, DefaultPackageName);
+ initializeParameters = InitializeYooAssetEditorSimulateMode(DefaultPackageName);
+ break;
}
case EPlayMode.OfflinePlayMode:
{
// 单机运行模式
- return InitializeYooAssetOfflinePlayMode(resourcePackage, decryptionServices);
+ initializeParameters = InitializeYooAssetOfflinePlayMode(decryptionServices);
+ break;
}
case EPlayMode.HostPlayMode:
{
// 联机运行模式
- return InitializeYooAssetHostPlayMode(resourcePackage, hostServerURL, fallbackHostServerURL, decryptionServices);
+ initializeParameters = InitializeYooAssetHostPlayMode(hostServerURL, fallbackHostServerURL, decryptionServices);
+ break;
}
case EPlayMode.WebPlayMode:
{
// WebGL运行模式
- return InitializeYooAssetWebPlayMode(resourcePackage, hostServerURL, fallbackHostServerURL);
- }
- default:
- {
- return null;
+ initializeParameters = InitializeYooAssetWebPlayMode(hostServerURL, fallbackHostServerURL);
+ break;
}
}
+
+
+ if (initializeParameters == null) return null;
+
+ initializeParameters.AutoUnloadBundleWhenUnused = AutoUnloadBundleWhenUnused;
+ return resourcePackage.InitializeAsync(initializeParameters);
}
private IDecryptionServices CreateDecryptionServices(string decryptionServicesName)
@@ -54,32 +60,30 @@ namespace AlicizaX.Resource.Runtime
return decryptionServices;
}
- private InitializationOperation InitializeYooAssetEditorSimulateMode(ResourcePackage resourcePackage, string packageName)
+ private InitializeParameters InitializeYooAssetEditorSimulateMode(string packageName)
{
var buildResult = EditorSimulateModeHelper.SimulateBuild(packageName);
var packageRoot = buildResult.PackageRootDirectory;
- var createParameters = new EditorSimulateModeParameters();
- createParameters.EditorFileSystemParameters = FileSystemParameters.CreateDefaultEditorFileSystemParameters(packageRoot);
- // createParameters.EditorFileSystemParameters.AddParameter(FileSystemParametersDefine.DECRYPTION_SERVICES,new FileOffsetEncryption());
- return resourcePackage.InitializeAsync(createParameters);
+ var initializeParameters = new EditorSimulateModeParameters();
+ initializeParameters.EditorFileSystemParameters = FileSystemParameters.CreateDefaultEditorFileSystemParameters(packageRoot);
+ return initializeParameters;
}
- private InitializationOperation InitializeYooAssetOfflinePlayMode(ResourcePackage resourcePackage, IDecryptionServices decryptionServices = null)
+ private InitializeParameters InitializeYooAssetOfflinePlayMode(IDecryptionServices decryptionServices = null)
{
var buildinFileSystem = FileSystemParameters.CreateDefaultBuildinFileSystemParameters(decryptionServices);
- var initParameters = new OfflinePlayModeParameters();
- initParameters.BuildinFileSystemParameters = buildinFileSystem;
- return resourcePackage.InitializeAsync(initParameters);
+ var initializeParameters = new OfflinePlayModeParameters();
+ initializeParameters.BuildinFileSystemParameters = buildinFileSystem;
+ return initializeParameters;
}
- private InitializationOperation InitializeYooAssetWebPlayMode(ResourcePackage resourcePackage, string hostServerURL, string fallbackHostServerURL)
+ private InitializeParameters InitializeYooAssetWebPlayMode(string hostServerURL, string fallbackHostServerURL)
{
- var initParameters = new WebPlayModeParameters();
+ var initializeParameters = new WebPlayModeParameters();
FileSystemParameters webRemoteFileSystemParams = null;
IRemoteServices remoteServices = new RemoteServices(hostServerURL, fallbackHostServerURL);
var webServerFileSystemParams = FileSystemParameters.CreateDefaultWebServerFileSystemParameters();
#if UNITY_WEBGL
-
#if WEIXINMINIGAME
@@ -91,20 +95,20 @@ namespace AlicizaX.Resource.Runtime
#endif
#endif
- initParameters.WebServerFileSystemParameters = webServerFileSystemParams;
- initParameters.WebRemoteFileSystemParameters = webRemoteFileSystemParams;
- return resourcePackage.InitializeAsync(initParameters);
+ initializeParameters.WebServerFileSystemParameters = webServerFileSystemParams;
+ initializeParameters.WebRemoteFileSystemParameters = webRemoteFileSystemParams;
+ return initializeParameters;
}
- private InitializationOperation InitializeYooAssetHostPlayMode(ResourcePackage resourcePackage, string hostServerURL, string fallbackHostServerURL, IDecryptionServices decryptionServices = null)
+ private InitializeParameters InitializeYooAssetHostPlayMode(string hostServerURL, string fallbackHostServerURL, IDecryptionServices decryptionServices = null)
{
IRemoteServices remoteServices = new RemoteServices(hostServerURL, fallbackHostServerURL);
var cacheFileSystem = FileSystemParameters.CreateDefaultCacheFileSystemParameters(remoteServices);
var buildinFileSystem = FileSystemParameters.CreateDefaultBuildinFileSystemParameters(decryptionServices);
- var initParameters = new HostPlayModeParameters();
- initParameters.BuildinFileSystemParameters = buildinFileSystem;
- initParameters.CacheFileSystemParameters = cacheFileSystem;
- return resourcePackage.InitializeAsync(initParameters);
+ var initializeParameters = new HostPlayModeParameters();
+ initializeParameters.BuildinFileSystemParameters = buildinFileSystem;
+ initializeParameters.CacheFileSystemParameters = cacheFileSystem;
+ return initializeParameters;
}
}
}
diff --git a/Runtime/Resource/Resource/ResourceModule.cs b/Runtime/Resource/Resource/ResourceModule.cs
index 8a388b1..5a36ef2 100644
--- a/Runtime/Resource/Resource/ResourceModule.cs
+++ b/Runtime/Resource/Resource/ResourceModule.cs
@@ -27,6 +27,11 @@ namespace AlicizaX.Resource.Runtime
public string DecryptionServices { get; set; }
+ ///
+ /// 自动释放资源引用计数为0的资源包
+ ///
+ public bool AutoUnloadBundleWhenUnused { get; set; } = false;
+
///
/// 设置异步系统参数,每帧执行消耗的最大时间切片(单位:毫秒)
///
@@ -807,6 +812,7 @@ namespace AlicizaX.Resource.Runtime
{
loadAssetCallbacks.LoadAssetFailureCallback(location, LoadResourceStatus.NotExist, errorMessage, userData);
}
+
return;
}
@@ -908,6 +914,7 @@ namespace AlicizaX.Resource.Runtime
{
loadAssetCallbacks.LoadAssetFailureCallback(location, LoadResourceStatus.NotExist, errorMessage, userData);
}
+
return;
}