diff --git a/Assets/TEngine/Runtime/GameFramework/Resource/AssetGroup.cs b/Assets/TEngine/Runtime/GameFramework/Resource/AssetGroup.cs
index 409eebc1..f999ec04 100644
--- a/Assets/TEngine/Runtime/GameFramework/Resource/AssetGroup.cs
+++ b/Assets/TEngine/Runtime/GameFramework/Resource/AssetGroup.cs
@@ -16,6 +16,11 @@ namespace TEngine
///
private AssetOperationHandle _handle;
+ ///
+ /// 资源操作句柄。
+ ///
+ public AssetOperationHandle Handle => _handle;
+
///
/// 标签。
///
@@ -42,7 +47,7 @@ namespace TEngine
/// 资源操作句柄。
/// 标签。
/// 资源句柄数据。
- public static AssetHandleData Alloc(AssetOperationHandle handle, string tag)
+ public static AssetHandleData Alloc(AssetOperationHandle handle, string tag = "")
{
AssetHandleData assetHandleData = MemoryPool.Acquire();
assetHandleData._handle = handle;
@@ -67,12 +72,12 @@ namespace TEngine
}
///
- /// 资源分组数据。
+ /// 资源组数据。
/// DisposeGroup。
///
public class AssetGroup : IMemory
{
- private Dictionary _handles = new Dictionary(16);
+ private GameFrameworkLinkedList _assetHandleDataLinkedList = new GameFrameworkLinkedList();
///
/// 注册资源数据到资源组内。
@@ -80,17 +85,10 @@ namespace TEngine
/// 资源操作句柄。
/// 资源标识。
/// 是否注册成功。
- public bool Register(AssetOperationHandle handle, string tag = "ROOT")
+ public bool Register(AssetOperationHandle handle,string tag = "")
{
- if (_handles.TryGetValue(tag, out var handleData))
- {
- _handles.Remove(tag);
- AssetHandleData.Release(handleData);
- handleData = null;
- }
-
- handleData = AssetHandleData.Alloc(handle, tag);
- _handles.Add(tag, handleData);
+ AssetHandleData handleData = AssetHandleData.Alloc(handle);
+ _assetHandleDataLinkedList.AddLast(handleData);
return true;
}
@@ -101,28 +99,66 @@ namespace TEngine
///
public bool UnRegister(string tag)
{
- if (_handles.TryGetValue(tag, out var handleData))
+ AssetHandleData founded = null;
+ foreach (var assetHandleData in _assetHandleDataLinkedList)
{
- _handles.Remove(tag);
- AssetHandleData.Release(handleData);
+ if (assetHandleData.Tag == tag)
+ {
+ founded = assetHandleData;
+ break;
+ }
+ }
+
+ if (founded != null)
+ {
+ _assetHandleDataLinkedList.Remove(founded);
+ AssetHandleData.Release(founded);
return true;
}
Log.Warning($"UnRegister AssetHandleData Tag:{tag} Failed");
return false;
}
+
+ ///
+ /// 从资源组内反注册资源数据。
+ ///
+ ///
+ ///
+ public bool UnRegister(AssetOperationHandle handle)
+ {
+ AssetHandleData founded = null;
+ foreach (var assetHandleData in _assetHandleDataLinkedList)
+ {
+ if (assetHandleData.Handle == handle)
+ {
+ founded = assetHandleData;
+ break;
+ }
+ }
+
+ if (founded != null)
+ {
+ _assetHandleDataLinkedList.Remove(founded);
+ AssetHandleData.Release(founded);
+ return true;
+ }
+
+ Log.Warning($"UnRegister AssetHandleData Handle:{handle} Failed");
+ return false;
+ }
public void Clear()
{
- var etr = _handles.GetEnumerator();
+ var etr = _assetHandleDataLinkedList.GetEnumerator();
while (etr.MoveNext())
{
- AssetHandleData assetHandleData = etr.Current.Value;
+ AssetHandleData assetHandleData = etr.Current;
AssetHandleData.Release(assetHandleData);
}
etr.Dispose();
- _handles.Clear();
+ _assetHandleDataLinkedList.Clear();
}
///
@@ -158,7 +194,7 @@ namespace TEngine
/// 要加载资源的标签名称。
/// 要加载资源的类型。
/// 资源实例。
- public T LoadAsset(string assetName, string tag) where T : Object
+ public T LoadAsset(string assetName) where T : Object
{
if (string.IsNullOrEmpty(assetName))
{
@@ -168,7 +204,7 @@ namespace TEngine
AssetOperationHandle handle = YooAssets.LoadAssetSync(assetName);
- Register(handle, tag);
+ Register(handle);
if (typeof(T) == typeof(GameObject))
{
@@ -189,7 +225,7 @@ namespace TEngine
/// 要加载资源的标签名称。
/// 要加载资源的类型。
/// 资源实例。
- public T LoadAsset(string assetName, Transform parent, string tag) where T : Object
+ public T LoadAsset(string assetName, Transform parent) where T : Object
{
if (string.IsNullOrEmpty(assetName))
{
@@ -199,7 +235,7 @@ namespace TEngine
AssetOperationHandle handle = YooAssets.LoadAssetSync(assetName);
- Register(handle, tag);
+ Register(handle);
if (typeof(T) == typeof(GameObject))
{
@@ -219,17 +255,17 @@ namespace TEngine
/// 要加载资源的标签名称。
/// 取消操作Token。
/// 资源实实例。
- public async UniTask LoadAssetAsync(string assetName, string tag, CancellationToken cancellationToken) where T : Object
+ public async UniTask LoadAssetAsync(string assetName, CancellationToken cancellationToken) where T : Object
{
AssetOperationHandle handle = GameModule.Resource.LoadAssetAsyncHandle(assetName);
- Register(handle, tag);
+ Register(handle);
bool cancelOrFailed = await handle.ToUniTask(cancellationToken: cancellationToken).SuppressCancellationThrow();
if (cancelOrFailed)
{
- UnRegister(tag);
+ UnRegister(handle);
return null;
}
@@ -244,17 +280,17 @@ namespace TEngine
/// 要加载资源的标签名称。
/// 取消操作Token。
/// 异步游戏物体实例。
- public async UniTask LoadGameObjectAsync(string assetName, string tag, CancellationToken cancellationToken)
+ public async UniTask LoadGameObjectAsync(string assetName, CancellationToken cancellationToken)
{
AssetOperationHandle handle = GameModule.Resource.LoadAssetAsyncHandle(assetName);
- Register(handle, tag);
+ Register(handle);
bool cancelOrFailed = await handle.ToUniTask(cancellationToken: cancellationToken).SuppressCancellationThrow();
if (cancelOrFailed)
{
- UnRegister(tag);
+ UnRegister(handle);
return null;
}