mirror of
https://github.com/tuyoogame/YooAsset.git
synced 2026-05-20 07:10:09 +00:00
update resource manager
UnloadAllAssetsAsync新增UnloadAllAssetsOptions参数
This commit is contained in:
@@ -9,9 +9,9 @@ namespace YooAsset
|
||||
{
|
||||
internal class ResourceManager
|
||||
{
|
||||
internal readonly Dictionary<string, ProviderOperation> _providerDic = new Dictionary<string, ProviderOperation>(5000);
|
||||
internal readonly Dictionary<string, LoadBundleFileOperation> _loaderDic = new Dictionary<string, LoadBundleFileOperation>(5000);
|
||||
internal readonly List<SceneHandle> _sceneHandles = new List<SceneHandle>(100);
|
||||
internal readonly Dictionary<string, ProviderOperation> ProviderDic = new Dictionary<string, ProviderOperation>(5000);
|
||||
internal readonly Dictionary<string, LoadBundleFileOperation> LoaderDic = new Dictionary<string, LoadBundleFileOperation>(5000);
|
||||
internal readonly List<SceneHandle> SceneHandles = new List<SceneHandle>(100);
|
||||
private long _sceneCreateIndex = 0;
|
||||
private IBundleQuery _bundleQuery;
|
||||
|
||||
@@ -20,6 +20,11 @@ namespace YooAsset
|
||||
/// </summary>
|
||||
public readonly string PackageName;
|
||||
|
||||
/// <summary>
|
||||
/// 锁定加载操作
|
||||
/// </summary>
|
||||
public bool LockLoadOperation = false;
|
||||
|
||||
|
||||
public ResourceManager(string packageName)
|
||||
{
|
||||
@@ -64,7 +69,7 @@ namespace YooAsset
|
||||
{
|
||||
string bundleName = mainLoader.LoadBundleInfo.Bundle.BundleName;
|
||||
mainLoader.DestroyLoader();
|
||||
_loaderDic.Remove(bundleName);
|
||||
LoaderDic.Remove(bundleName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,7 +84,7 @@ namespace YooAsset
|
||||
{
|
||||
string bundleName = dependLoader.LoadBundleInfo.Bundle.BundleName;
|
||||
dependLoader.DestroyLoader();
|
||||
_loaderDic.Remove(bundleName);
|
||||
LoaderDic.Remove(bundleName);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -92,6 +97,15 @@ namespace YooAsset
|
||||
/// </summary>
|
||||
public SceneHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneParameters loadSceneParams, bool suspendLoad, uint priority)
|
||||
{
|
||||
if (LockLoadOperation)
|
||||
{
|
||||
string error = $"The load operation locked !";
|
||||
YooLogger.Error(error);
|
||||
CompletedProvider completedProvider = new CompletedProvider(this, assetInfo);
|
||||
completedProvider.SetCompletedWithError(error);
|
||||
return completedProvider.CreateHandle<SceneHandle>();
|
||||
}
|
||||
|
||||
if (assetInfo.IsInvalid)
|
||||
{
|
||||
YooLogger.Error($"Failed to load scene ! {assetInfo.Error}");
|
||||
@@ -106,14 +120,14 @@ namespace YooAsset
|
||||
{
|
||||
provider = new SceneProvider(this, providerGUID, assetInfo, loadSceneParams, suspendLoad);
|
||||
provider.InitSpawnDebugInfo();
|
||||
_providerDic.Add(providerGUID, provider);
|
||||
ProviderDic.Add(providerGUID, provider);
|
||||
OperationSystem.StartOperation(PackageName, provider);
|
||||
}
|
||||
|
||||
provider.Priority = priority;
|
||||
var handle = provider.CreateHandle<SceneHandle>();
|
||||
handle.PackageName = PackageName;
|
||||
_sceneHandles.Add(handle);
|
||||
SceneHandles.Add(handle);
|
||||
return handle;
|
||||
}
|
||||
|
||||
@@ -122,6 +136,15 @@ namespace YooAsset
|
||||
/// </summary>
|
||||
public AssetHandle LoadAssetAsync(AssetInfo assetInfo, uint priority)
|
||||
{
|
||||
if (LockLoadOperation)
|
||||
{
|
||||
string error = $"The load operation locked !";
|
||||
YooLogger.Error(error);
|
||||
CompletedProvider completedProvider = new CompletedProvider(this, assetInfo);
|
||||
completedProvider.SetCompletedWithError(error);
|
||||
return completedProvider.CreateHandle<AssetHandle>();
|
||||
}
|
||||
|
||||
if (assetInfo.IsInvalid)
|
||||
{
|
||||
YooLogger.Error($"Failed to load asset ! {assetInfo.Error}");
|
||||
@@ -136,7 +159,7 @@ namespace YooAsset
|
||||
{
|
||||
provider = new AssetProvider(this, providerGUID, assetInfo);
|
||||
provider.InitSpawnDebugInfo();
|
||||
_providerDic.Add(providerGUID, provider);
|
||||
ProviderDic.Add(providerGUID, provider);
|
||||
OperationSystem.StartOperation(PackageName, provider);
|
||||
}
|
||||
|
||||
@@ -149,6 +172,15 @@ namespace YooAsset
|
||||
/// </summary>
|
||||
public SubAssetsHandle LoadSubAssetsAsync(AssetInfo assetInfo, uint priority)
|
||||
{
|
||||
if (LockLoadOperation)
|
||||
{
|
||||
string error = $"The load operation locked !";
|
||||
YooLogger.Error(error);
|
||||
CompletedProvider completedProvider = new CompletedProvider(this, assetInfo);
|
||||
completedProvider.SetCompletedWithError(error);
|
||||
return completedProvider.CreateHandle<SubAssetsHandle>();
|
||||
}
|
||||
|
||||
if (assetInfo.IsInvalid)
|
||||
{
|
||||
YooLogger.Error($"Failed to load sub assets ! {assetInfo.Error}");
|
||||
@@ -163,7 +195,7 @@ namespace YooAsset
|
||||
{
|
||||
provider = new SubAssetsProvider(this, providerGUID, assetInfo);
|
||||
provider.InitSpawnDebugInfo();
|
||||
_providerDic.Add(providerGUID, provider);
|
||||
ProviderDic.Add(providerGUID, provider);
|
||||
OperationSystem.StartOperation(PackageName, provider);
|
||||
}
|
||||
|
||||
@@ -176,6 +208,15 @@ namespace YooAsset
|
||||
/// </summary>
|
||||
public AllAssetsHandle LoadAllAssetsAsync(AssetInfo assetInfo, uint priority)
|
||||
{
|
||||
if (LockLoadOperation)
|
||||
{
|
||||
string error = $"The load operation locked !";
|
||||
YooLogger.Error(error);
|
||||
CompletedProvider completedProvider = new CompletedProvider(this, assetInfo);
|
||||
completedProvider.SetCompletedWithError(error);
|
||||
return completedProvider.CreateHandle<AllAssetsHandle>();
|
||||
}
|
||||
|
||||
if (assetInfo.IsInvalid)
|
||||
{
|
||||
YooLogger.Error($"Failed to load all assets ! {assetInfo.Error}");
|
||||
@@ -190,7 +231,7 @@ namespace YooAsset
|
||||
{
|
||||
provider = new AllAssetsProvider(this, providerGUID, assetInfo);
|
||||
provider.InitSpawnDebugInfo();
|
||||
_providerDic.Add(providerGUID, provider);
|
||||
ProviderDic.Add(providerGUID, provider);
|
||||
OperationSystem.StartOperation(PackageName, provider);
|
||||
}
|
||||
|
||||
@@ -203,6 +244,15 @@ namespace YooAsset
|
||||
/// </summary>
|
||||
public RawFileHandle LoadRawFileAsync(AssetInfo assetInfo, uint priority)
|
||||
{
|
||||
if (LockLoadOperation)
|
||||
{
|
||||
string error = $"The load operation locked !";
|
||||
YooLogger.Error(error);
|
||||
CompletedProvider completedProvider = new CompletedProvider(this, assetInfo);
|
||||
completedProvider.SetCompletedWithError(error);
|
||||
return completedProvider.CreateHandle<RawFileHandle>();
|
||||
}
|
||||
|
||||
if (assetInfo.IsInvalid)
|
||||
{
|
||||
YooLogger.Error($"Failed to load raw file ! {assetInfo.Error}");
|
||||
@@ -217,7 +267,7 @@ namespace YooAsset
|
||||
{
|
||||
provider = new RawFileProvider(this, providerGUID, assetInfo);
|
||||
provider.InitSpawnDebugInfo();
|
||||
_providerDic.Add(providerGUID, provider);
|
||||
ProviderDic.Add(providerGUID, provider);
|
||||
OperationSystem.StartOperation(PackageName, provider);
|
||||
}
|
||||
|
||||
@@ -245,12 +295,12 @@ namespace YooAsset
|
||||
{
|
||||
foreach (var provider in removeList)
|
||||
{
|
||||
_providerDic.Remove(provider.ProviderGUID);
|
||||
ProviderDic.Remove(provider.ProviderGUID);
|
||||
}
|
||||
}
|
||||
internal bool HasAnyLoader()
|
||||
{
|
||||
return _loaderDic.Count > 0;
|
||||
return LoaderDic.Count > 0;
|
||||
}
|
||||
|
||||
private LoadBundleFileOperation CreateBundleFileLoaderInternal(BundleInfo bundleInfo)
|
||||
@@ -264,19 +314,19 @@ namespace YooAsset
|
||||
// 新增下载需求
|
||||
loaderOperation = new LoadBundleFileOperation(this, bundleInfo);
|
||||
OperationSystem.StartOperation(PackageName, loaderOperation);
|
||||
_loaderDic.Add(bundleName, loaderOperation);
|
||||
LoaderDic.Add(bundleName, loaderOperation);
|
||||
return loaderOperation;
|
||||
}
|
||||
private LoadBundleFileOperation TryGetBundleFileLoader(string bundleName)
|
||||
{
|
||||
if (_loaderDic.TryGetValue(bundleName, out LoadBundleFileOperation value))
|
||||
if (LoaderDic.TryGetValue(bundleName, out LoadBundleFileOperation value))
|
||||
return value;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
private ProviderOperation TryGetAssetProvider(string providerGUID)
|
||||
{
|
||||
if (_providerDic.TryGetValue(providerGUID, out ProviderOperation value))
|
||||
if (ProviderDic.TryGetValue(providerGUID, out ProviderOperation value))
|
||||
return value;
|
||||
else
|
||||
return null;
|
||||
@@ -284,7 +334,7 @@ namespace YooAsset
|
||||
private void OnSceneUnloaded(Scene scene)
|
||||
{
|
||||
List<SceneHandle> removeList = new List<SceneHandle>();
|
||||
foreach (var sceneHandle in _sceneHandles)
|
||||
foreach (var sceneHandle in SceneHandles)
|
||||
{
|
||||
if (sceneHandle.IsValid)
|
||||
{
|
||||
@@ -297,15 +347,15 @@ namespace YooAsset
|
||||
}
|
||||
foreach (var sceneHandle in removeList)
|
||||
{
|
||||
_sceneHandles.Remove(sceneHandle);
|
||||
SceneHandles.Remove(sceneHandle);
|
||||
}
|
||||
}
|
||||
|
||||
#region 调试信息
|
||||
internal List<DebugProviderInfo> GetDebugReportInfos()
|
||||
{
|
||||
List<DebugProviderInfo> result = new List<DebugProviderInfo>(_providerDic.Count);
|
||||
foreach (var provider in _providerDic.Values)
|
||||
List<DebugProviderInfo> result = new List<DebugProviderInfo>(ProviderDic.Count);
|
||||
foreach (var provider in ProviderDic.Values)
|
||||
{
|
||||
DebugProviderInfo providerInfo = new DebugProviderInfo();
|
||||
providerInfo.AssetPath = provider.MainAssetInfo.AssetPath;
|
||||
|
||||
Reference in New Issue
Block a user