diff --git a/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/AssetGroup.cs b/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/AssetGroup.cs
index 638c7c5d..09030a28 100644
--- a/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/AssetGroup.cs
+++ b/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/AssetGroup.cs
@@ -22,7 +22,8 @@ namespace TEngine
public AssetOperationHandle Handle => _handle;
///
- /// 标签。
+ /// 自定义资源标签。
+ /// 不同于AssetTag。
///
public string Tag { private set; get; }
@@ -78,7 +79,8 @@ namespace TEngine
public class AssetGroup : IMemory
{
private readonly Dictionary _assetHandleDataMap = new Dictionary();
-
+
+ #region 引用资源数据
///
/// 引用资源数据到资源组内。
///
@@ -105,32 +107,38 @@ namespace TEngine
_assetHandleDataMap[address] = handleData;
return true;
}
+ #endregion
+
+ #region 释放资源数据
+ private readonly List _tempResult = new List();
///
/// 从资源组内释放资源数据。
///
- /// 资源标签。
+ /// 自定义资源标签。
/// 是否释放成功。
- public bool ReleaseByTag(string assetTag)
+ public bool ReleaseByTag(string tag)
{
- AssetHandleData founded = null;
+ _tempResult.Clear();
foreach (var assetHandleData in _assetHandleDataMap.Values)
{
- if (assetHandleData.Tag == assetTag)
+ if (assetHandleData.Tag == tag)
{
- founded = assetHandleData;
- break;
+ _tempResult.Add(assetHandleData);
}
}
- if (founded != null)
+ if (_tempResult.Count > 0)
{
- _assetHandleDataMap.Remove(founded.Handle.GetAssetInfo().Address);
- AssetHandleData.Release(founded);
+ foreach (var founded in _tempResult)
+ {
+ _assetHandleDataMap.Remove(founded.Handle.GetAssetInfo().Address);
+ AssetHandleData.Release(founded);
+ }
return true;
}
- Log.Warning($"Release AssetHandleData Tag:{assetTag} Failed");
+ Log.Warning($"Release AssetHandleData Tag:{tag} Failed");
return false;
}
@@ -178,20 +186,9 @@ namespace TEngine
Log.Warning($"Release AssetHandleData Handle:{handle} Failed");
return false;
}
+ #endregion
- public void Clear()
- {
- var etr = _assetHandleDataMap.GetEnumerator();
- while (etr.MoveNext())
- {
- AssetHandleData assetHandleData = etr.Current.Value;
- AssetHandleData.Release(assetHandleData);
- }
-
- etr.Dispose();
- _assetHandleDataMap.Clear();
- }
-
+ #region 内存池接口
///
/// 从内存池中获取资源分组数据。
///
@@ -216,25 +213,41 @@ namespace TEngine
MemoryPool.Release(assetGroup);
}
+
+ public void Clear()
+ {
+ var etr = _assetHandleDataMap.GetEnumerator();
+ while (etr.MoveNext())
+ {
+ AssetHandleData assetHandleData = etr.Current.Value;
+ AssetHandleData.Release(assetHandleData);
+ }
+
+ etr.Dispose();
+ _assetHandleDataMap.Clear();
+ }
+ #endregion
///
/// 同步加载资源。
///
- /// 要加载资源的名称。
+ /// 资源的定位地址。
/// 父节点位置。
+ /// 是否需要实例化。
+ /// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 资源实例。
- public T LoadAsset(string assetName, Transform parent = null) where T : Object
+ public T LoadAsset(string location, bool needInstance = true,string packageName = "",Transform parent = null) where T : Object
{
- if (string.IsNullOrEmpty(assetName))
+ if (string.IsNullOrEmpty(location))
{
Log.Error("Asset name is invalid.");
return default;
}
- if (_assetHandleDataMap.TryGetValue(assetName,out var assetHandleData))
+ if (_assetHandleDataMap.TryGetValue(location,out var assetHandleData))
{
- if (typeof(T) == typeof(GameObject))
+ if (typeof(T) == typeof(GameObject) && needInstance)
{
GameObject ret = assetHandleData.Handle.InstantiateSync(parent);
return ret as T;
@@ -245,11 +258,20 @@ namespace TEngine
}
}
- AssetOperationHandle handle = YooAssets.LoadAssetSync(assetName);
+ AssetOperationHandle handle;
+ if (string.IsNullOrEmpty(packageName))
+ {
+ handle = YooAssets.LoadAssetSync(location);
+ }
+ else
+ {
+ var package = YooAssets.GetPackage(packageName);
+ handle = package.LoadAssetSync(location);
+ }
Reference(handle);
- if (typeof(T) == typeof(GameObject))
+ if (typeof(T) == typeof(GameObject) && needInstance)
{
GameObject ret = handle.InstantiateSync(parent);
return ret as T;
@@ -259,115 +281,29 @@ namespace TEngine
return handle.AssetObject as T;
}
}
-
+
///
- /// 同步加载资源。
+ /// 异步加载资源。
///
- /// 要加载资源的名称。
- /// 要加载资源的类型。
- /// 资源操作句柄。
- /// 资源实例。
- public T LoadAsset(string assetName,out AssetOperationHandle assetOperationHandle) where T : Object
- {
- assetOperationHandle = null;
- if (string.IsNullOrEmpty(assetName))
- {
- Log.Error("Asset name is invalid.");
- return default;
- }
-
- if (_assetHandleDataMap.TryGetValue(assetName,out var assetHandleData))
- {
- if (typeof(T) == typeof(GameObject))
- {
- GameObject ret = assetHandleData.Handle.InstantiateSync();
- return ret as T;
- }
- else
- {
- return assetHandleData.Handle.AssetObject as T;
- }
- }
-
- assetOperationHandle = YooAssets.LoadAssetSync(assetName);
-
- Reference(assetOperationHandle);
-
- if (typeof(T) == typeof(GameObject))
- {
- GameObject ret = assetOperationHandle.InstantiateSync();
- return ret as T;
- }
- else
- {
- return assetOperationHandle.AssetObject as T;
- }
- }
-
- ///
- /// 同步加载资源。
- ///
- /// 要加载资源的名称。
- /// 父节点位置。
- /// 资源操作句柄。
- /// 要加载资源的类型。
- /// 资源实例。
- public T LoadAsset(string assetName, Transform parent,out AssetOperationHandle assetOperationHandle) where T : Object
- {
- assetOperationHandle = null;
- if (string.IsNullOrEmpty(assetName))
- {
- Log.Error("Asset name is invalid.");
- return default;
- }
-
- if (_assetHandleDataMap.TryGetValue(assetName,out var assetHandleData))
- {
- if (typeof(T) == typeof(GameObject))
- {
- GameObject ret = assetHandleData.Handle.InstantiateSync(parent);
- return ret as T;
- }
- else
- {
- return assetHandleData.Handle.AssetObject as T;
- }
- }
-
- assetOperationHandle = YooAssets.LoadAssetSync(assetName);
-
- Reference(assetOperationHandle);
-
- if (typeof(T) == typeof(GameObject))
- {
- GameObject ret = assetOperationHandle.InstantiateSync(parent);
- return ret as T;
- }
- else
- {
- return assetOperationHandle.AssetObject as T;
- }
- }
-
- ///
- /// 异步加载资源实例。
- ///
- /// 要加载的实例名称。
+ /// 资源的定位地址。
/// 取消操作Token。
- /// 资源实实例。
- // ReSharper disable once UnusedParameter.Global
- // ReSharper disable once RedundantAssignment
- public async UniTask LoadAssetAsync(string assetName, CancellationToken cancellationToken = default) where T : Object
+ /// 是否需要实例化。
+ /// 指定资源包的名称。不传使用默认资源包。
+ /// 资源实例父节点。
+ /// 要加载资源的类型。
+ /// 异步资源实例。
+ public async UniTask LoadAssetAsync(string location, CancellationToken cancellationToken = default,
+ bool needInstance = true, string packageName = "", Transform parent = null) where T : Object
{
- if (string.IsNullOrEmpty(assetName))
+ if (string.IsNullOrEmpty(location))
{
Log.Error("Asset name is invalid.");
return default;
}
- if (_assetHandleDataMap.TryGetValue(assetName,out var assetHandleData))
+ if (_assetHandleDataMap.TryGetValue(location,out var assetHandleData))
{
- if (typeof(T) == typeof(GameObject))
+ if (typeof(T) == typeof(GameObject) && needInstance)
{
GameObject ret = assetHandleData.Handle.InstantiateSync();
return ret as T;
@@ -378,7 +314,16 @@ namespace TEngine
}
}
- AssetOperationHandle handle = YooAssets.LoadAssetAsync(assetName);
+ AssetOperationHandle handle;
+ if (string.IsNullOrEmpty(packageName))
+ {
+ handle = YooAssets.LoadAssetSync(location);
+ }
+ else
+ {
+ var package = YooAssets.GetPackage(packageName);
+ handle = package.LoadAssetSync(location);
+ }
Reference(handle);
@@ -391,9 +336,9 @@ namespace TEngine
return null;
}
- if (typeof(T) == typeof(GameObject))
+ if (typeof(T) == typeof(GameObject) && needInstance)
{
- GameObject ret = handle.InstantiateSync();
+ GameObject ret = handle.InstantiateSync(parent);
return ret as T;
}
else
@@ -401,16 +346,5 @@ namespace TEngine
return handle.AssetObject as T;
}
}
-
- ///
- /// 异步加载游戏物体。
- ///
- /// 要加载的游戏物体名称。
- /// 取消操作Token。
- /// 异步游戏物体实例。
- public async UniTask LoadGameObjectAsync(string assetName, CancellationToken cancellationToken = default)
- {
- return await LoadAssetAsync(assetName,cancellationToken);
- }
}
}
\ No newline at end of file
diff --git a/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/AssetReference.cs b/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/AssetReference.cs
index b4337c1c..64d938c7 100644
--- a/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/AssetReference.cs
+++ b/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/AssetReference.cs
@@ -153,82 +153,49 @@ namespace TEngine
///
/// 同步加载资源。
///
- /// 要加载资源的名称。
- /// 要加载资源的类型。
- /// 资源实例。
- public T LoadAsset(string assetName) where T : Object
- {
- DirtyInitAssetGroup();
- return _assetGroup.LoadAsset(assetName);
- }
-
- ///
- /// 同步加载资源。
- ///
- /// 要加载资源的名称。
+ /// 资源的定位地址。
/// 父节点位置。
+ /// 是否需要实例化。
+ /// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 资源实例。
- public T LoadAsset(string assetName, Transform parent) where T : Object
+ public T LoadAsset(string location, bool needInstance = true,string packageName = "",Transform parent = null) where T : Object
{
DirtyInitAssetGroup();
- return _assetGroup.LoadAsset(assetName, parent);
+ return _assetGroup.LoadAsset(location, needInstance, packageName, parent);
}
///
- /// 同步加载资源。
+ /// 异步加载资源。
///
- /// 要加载资源的名称。
- /// 要加载资源的类型。
- /// 资源操作句柄。
- /// 资源实例。
- // ReSharper disable once ParameterHidesMember
- public T LoadAsset(string assetName, out AssetOperationHandle assetOperationHandle) where T : Object
- {
- DirtyInitAssetGroup();
- return _assetGroup.LoadAsset(assetName, out assetOperationHandle);
- }
-
- ///
- /// 同步加载资源。
- ///
- /// 要加载资源的名称。
- /// 父节点位置。
- /// 要加载资源的类型。
- /// 资源操作句柄。
- /// 资源实例。
- // ReSharper disable once ParameterHidesMember
- public T LoadAsset(string assetName, Transform parent, out AssetOperationHandle assetOperationHandle)
- where T : Object
- {
- DirtyInitAssetGroup();
- return _assetGroup.LoadAsset(assetName, parent, out assetOperationHandle);
- }
-
- ///
- /// 异步加载资源实例。
- ///
- /// 要加载的实例名称。
+ /// 资源的定位地址。
/// 取消操作Token。
- /// 资源实实例。
- public async UniTask LoadAssetAsync(string assetName, CancellationToken cancellationToken = default)
- where T : Object
+ /// 是否需要实例化。
+ /// 指定资源包的名称。不传使用默认资源包。
+ /// 资源实例父节点。
+ /// 要加载资源的类型。
+ /// 异步资源实例。
+ public async UniTask LoadAssetAsync(string location, CancellationToken cancellationToken = default,
+ bool needInstance = true, string packageName = "", Transform parent = null) where T : Object
{
DirtyInitAssetGroup();
- return await _assetGroup.LoadAssetAsync(assetName, cancellationToken);
+ return await _assetGroup.LoadAssetAsync(location, cancellationToken, needInstance, packageName, parent);
}
///
/// 异步加载游戏物体。
///
- /// 要加载的游戏物体名称。
+ /// 资源的定位地址。
/// 取消操作Token。
- /// 异步游戏物体实例。
- public async UniTask LoadGameObjectAsync(string assetName,
- CancellationToken cancellationToken = default)
+ /// 是否需要实例化。
+ /// 指定资源包的名称。不传使用默认资源包。
+ /// 资源实例父节点。
+ /// 异步资源实例。
+ public async UniTask LoadGameObjectAsync(string location, CancellationToken cancellationToken = default,
+ bool needInstance = true, string packageName = "", Transform parent = null)
{
DirtyInitAssetGroup();
- return await _assetGroup.LoadGameObjectAsync(assetName, cancellationToken);
+ return await LoadAssetAsync(location, cancellationToken, needInstance, packageName, parent);
}
///