Resource增加自动释放

This commit is contained in:
陈思海 2025-11-17 16:49:25 +08:00
parent b6eaa0c3d0
commit f8f2ea0201
5 changed files with 59 additions and 34 deletions

View File

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

View File

@ -29,6 +29,10 @@ namespace AlicizaX.Resource.Runtime
string DecryptionServices { get; set; }
/// <summary>
/// 自动释放资源引用计数为0的资源包
/// </summary>
bool AutoUnloadBundleWhenUnused { get; set; }
/// <summary>
/// 同时下载的最大数目。

View File

@ -34,7 +34,13 @@ namespace AlicizaX.Resource.Runtime
[SerializeField] private bool useSystemUnloadUnusedAssets = true;
[SerializeField] private string _decryptionServices = "";
[SerializeField] private string decryptionServices = "";
/// <summary>
/// 自动释放资源引用计数为0的资源包
/// </summary>
[SerializeField] public bool autoUnloadBundleWhenUnused = false;
[SerializeField] private EPlayMode _playMode = EPlayMode.EditorSimulateMode;
/// <summary>
@ -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;

View File

@ -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;
}
}
}

View File

@ -27,6 +27,11 @@ namespace AlicizaX.Resource.Runtime
public string DecryptionServices { get; set; }
/// <summary>
/// 自动释放资源引用计数为0的资源包
/// </summary>
public bool AutoUnloadBundleWhenUnused { get; set; } = false;
/// <summary>
/// 设置异步系统参数,每帧执行消耗的最大时间切片(单位:毫秒)
/// </summary>
@ -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;
}