From 386787c6ecac68d56d711487d9619900467b24df Mon Sep 17 00:00:00 2001
From: Weekend <872285171@qq.com>
Date: Wed, 15 Nov 2023 00:14:07 +0800
Subject: [PATCH] =?UTF-8?q?add:Resource=E6=A8=A1=E5=9D=97=E6=94=AF?=
=?UTF-8?q?=E6=8C=81=E6=93=8D=E4=BD=9C=E6=8C=87=E5=AE=9A=E8=B5=84=E6=BA=90?=
=?UTF-8?q?=E5=8C=85=E7=9A=84=E8=B5=84=E6=BA=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Modules/ResourceModule/AssetReference.cs | 32 +-
.../ResourceModule/IResourceManager.cs | 91 ++-
.../Operation/LoadAssetsByTagOperation.cs | 31 +-
.../Modules/ResourceModule/ResourceManager.cs | 552 ++++++++++--------
.../Modules/ResourceModule/ResourceModule.cs | 220 ++++---
5 files changed, 575 insertions(+), 351 deletions(-)
diff --git a/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/AssetReference.cs b/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/AssetReference.cs
index 44a749d2..0364329a 100644
--- a/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/AssetReference.cs
+++ b/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/AssetReference.cs
@@ -14,6 +14,7 @@ namespace TEngine
{
private int _instanceID = 0;
private string _assetLocation;
+ private string _packageName;
private AssetGroup _assetGroup;
private AssetOperationHandle _operationHandle;
@@ -32,6 +33,11 @@ namespace TEngine
///
public string AssetLocation => _assetLocation;
+ ///
+ /// 资源包名称。
+ ///
+ public string PackageName => _packageName;
+
///
/// 脏初始化资源分组。
///
@@ -49,10 +55,13 @@ namespace TEngine
/// 资源操作句柄。
/// 资源定位地址。
/// 父级资源引用。(NullAble)
- public void Bind(AssetOperationHandle operation, string assetLocation, AssetReference parent = null)
+ /// 指定资源包的名称。不传使用默认资源包
+ public void Bind(AssetOperationHandle operation, string assetLocation, AssetReference parent = null,
+ string packageName = "")
{
_operationHandle = operation;
this._assetLocation = assetLocation;
+ this._packageName = packageName;
_instanceID = gameObject.GetInstanceID();
if (parent != null)
{
@@ -183,7 +192,8 @@ namespace TEngine
/// 资源操作句柄。
/// 资源实例。
// ReSharper disable once ParameterHidesMember
- public T LoadAsset(string assetName, Transform parent, out AssetOperationHandle assetOperationHandle) where T : Object
+ public T LoadAsset(string assetName, Transform parent, out AssetOperationHandle assetOperationHandle)
+ where T : Object
{
DirtyInitAssetGroup();
return _assetGroup.LoadAsset(assetName, parent, out assetOperationHandle);
@@ -195,7 +205,8 @@ namespace TEngine
/// 要加载的实例名称。
/// 取消操作Token。
/// 资源实实例。
- public async UniTask LoadAssetAsync(string assetName, CancellationToken cancellationToken = default) where T : Object
+ public async UniTask LoadAssetAsync(string assetName, CancellationToken cancellationToken = default)
+ where T : Object
{
DirtyInitAssetGroup();
return await _assetGroup.LoadAssetAsync(assetName, cancellationToken);
@@ -207,7 +218,8 @@ namespace TEngine
/// 要加载的游戏物体名称。
/// 取消操作Token。
/// 异步游戏物体实例。
- public async UniTask LoadGameObjectAsync(string assetName, CancellationToken cancellationToken = default)
+ public async UniTask LoadGameObjectAsync(string assetName,
+ CancellationToken cancellationToken = default)
{
DirtyInitAssetGroup();
return await _assetGroup.LoadGameObjectAsync(assetName, cancellationToken);
@@ -220,9 +232,11 @@ namespace TEngine
/// 资源句柄。
/// 资源定位地址。
/// 父级引用。
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源引用组件。
/// 捕获异常。
- public static AssetReference BindAssetReference(GameObject go, AssetOperationHandle handle, string location = "", AssetReference parent = null)
+ public static AssetReference BindAssetReference(GameObject go, AssetOperationHandle handle,
+ string location = "", AssetReference parent = null, string packageName = "")
{
if (go == null)
{
@@ -236,7 +250,7 @@ namespace TEngine
var ret = go.GetOrAddComponent();
- ret.Bind(operation: handle, assetLocation: location, parent: parent);
+ ret.Bind(operation: handle, assetLocation: location, parent: parent, packageName: packageName);
return ret;
}
@@ -247,9 +261,11 @@ namespace TEngine
/// 游戏物体实例。
/// 资源定位地址。
/// 父级引用。
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源引用组件。
/// 捕获异常。
- public static AssetReference BindAssetReference(GameObject go, string location = "", AssetReference parent = null)
+ public static AssetReference BindAssetReference(GameObject go, string location = "",
+ AssetReference parent = null, string packageName = "")
{
if (go == null)
{
@@ -258,7 +274,7 @@ namespace TEngine
var ret = go.GetOrAddComponent();
- ret.Bind(operation: null, assetLocation: location, parent: parent);
+ ret.Bind(operation: null, assetLocation: location, parent: parent, packageName: packageName);
return ret;
}
diff --git a/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/IResourceManager.cs b/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/IResourceManager.cs
index 67a4d78b..639a5226 100644
--- a/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/IResourceManager.cs
+++ b/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/IResourceManager.cs
@@ -2,7 +2,6 @@
using System.Threading;
using Cysharp.Threading.Tasks;
using UnityEngine;
-using UnityEngine.SceneManagement;
using YooAsset;
namespace TEngine
@@ -110,8 +109,9 @@ namespace TEngine
/// 检查资源是否存在。
///
/// 要检查资源的名称。
+ /// 指定资源包的名称。不传使用默认资源包
/// 检查资源是否存在的结果。
- HasAssetResult HasAsset(string location);
+ HasAssetResult HasAsset(string location, string packageName = "");
///
/// 设置默认资源包。
@@ -123,42 +123,48 @@ namespace TEngine
/// 是否需要从远端更新下载。
///
/// 资源的定位地址。
+ /// 指定资源包的名称。不传使用默认资源包
/// 是否需要从远端下载。
- bool IsNeedDownloadFromRemote(string location);
+ bool IsNeedDownloadFromRemote(string location, string packageName = "");
///
/// 是否需要从远端更新下载。
///
/// 资源信息。
+ /// 指定资源包的名称。不传使用默认资源包
/// 是否需要从远端下载。
- bool IsNeedDownloadFromRemote(AssetInfo assetInfo);
+ bool IsNeedDownloadFromRemote(AssetInfo assetInfo, string packageName = "");
///
/// 获取资源信息列表。
///
/// 资源标签。
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源信息列表。
- AssetInfo[] GetAssetInfos(string tag);
+ AssetInfo[] GetAssetInfos(string tag, string packageName = "");
///
/// 获取资源信息列表。
///
/// 资源标签列表。
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源信息列表。
- AssetInfo[] GetAssetInfos(string[] tags);
+ AssetInfo[] GetAssetInfos(string[] tags, string packageName = "");
///
/// 获取资源信息。
///
/// 资源的定位地址。
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源信息。
- AssetInfo GetAssetInfo(string location);
+ AssetInfo GetAssetInfo(string location, string packageName = "");
///
/// 检查资源定位地址是否有效。
///
/// 资源的定位地址。
- bool CheckLocationValid(string location);
+ /// 指定资源包的名称。不传使用默认资源包
+ bool CheckLocationValid(string location, string packageName = "");
///
/// 同步加载资源。
@@ -166,9 +172,11 @@ namespace TEngine
/// 资源的定位地址。
/// 是否需要实例化。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 资源实例。
- T LoadAsset(string location, bool needInstance, bool needCache = false) where T : Object;
+ T LoadAsset(string location, bool needInstance, bool needCache = false, string packageName = "")
+ where T : Object;
///
/// 同步加载资源。
@@ -177,9 +185,11 @@ namespace TEngine
/// 父节点位置。
/// 是否需要实例化。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 资源实例。
- T LoadAsset(string location, Transform parent, bool needInstance, bool needCache = false) where T : Object;
+ T LoadAsset(string location, Transform parent, bool needInstance, bool needCache = false,
+ string packageName = "") where T : Object;
///
/// 同步加载资源。
@@ -187,9 +197,11 @@ namespace TEngine
/// 资源操作句柄。
/// 资源的定位地址。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 资源实例。
- T LoadAsset(string location, out AssetOperationHandle handle, bool needCache = false) where T : Object;
+ T LoadAsset(string location, out AssetOperationHandle handle, bool needCache = false,
+ string packageName = "") where T : Object;
///
/// 同步加载资源。
@@ -198,55 +210,68 @@ namespace TEngine
/// 资源操作句柄。
/// 父节点位置。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 资源实例。
- T LoadAsset(string location, Transform parent, out AssetOperationHandle handle, bool needCache = false) where T : Object;
+ T LoadAsset(string location, Transform parent, out AssetOperationHandle handle, bool needCache = false,
+ string packageName = "")
+ where T : Object;
///
/// 同步加载资源并获取句柄。
///
/// 资源的定位地址。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 同步加载资源句柄。
- AssetOperationHandle LoadAssetGetOperation(string location, bool needCache = false) where T : Object;
+ AssetOperationHandle LoadAssetGetOperation(string location, bool needCache = false, string packageName = "")
+ where T : Object;
///
/// 异步加载资源并获取句柄。
///
/// 资源的定位地址。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 异步加载资源句柄。
- AssetOperationHandle LoadAssetAsyncHandle(string location, bool needCache = false) where T : Object;
+ AssetOperationHandle LoadAssetAsyncHandle(string location, bool needCache = false, string packageName = "")
+ where T : Object;
///
/// 同步加载子资源对象。
///
/// 资源类型。
/// 资源的定位地址。
- public SubAssetsOperationHandle LoadSubAssetsSync(string location) where TObject : Object;
+ /// 指定资源包的名称。不传使用默认资源包
+ public SubAssetsOperationHandle LoadSubAssetsSync(string location, string packageName = "")
+ where TObject : Object;
///
/// 异步加载子资源对象
///
/// 资源类型。
/// 资源的定位地址。
- public SubAssetsOperationHandle LoadSubAssetsAsync(string location) where TObject : Object;
+ /// 指定资源包的名称。不传使用默认资源包
+ public SubAssetsOperationHandle LoadSubAssetsAsync(string location, string packageName = "")
+ where TObject : Object;
///
/// 同步加载子资源对象。
///
/// 资源信息。
- public SubAssetsOperationHandle LoadSubAssetsSync(AssetInfo assetInfo);
+ /// 指定资源包的名称。不传使用默认资源包
+ public SubAssetsOperationHandle LoadSubAssetsSync(AssetInfo assetInfo, string packageName = "");
///
/// 通过Tag加载资源对象集合。
///
/// 资源标识。
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源类型。
/// 资源对象集合。
- UniTask> LoadAssetsByTagAsync(string assetTag) where T : UnityEngine.Object;
+ UniTask> LoadAssetsByTagAsync(string assetTag, string packageName = "") where T : UnityEngine.Object;
///
/// 异步加载资源。
@@ -255,9 +280,11 @@ namespace TEngine
/// 取消操作Token。
/// 是否需要实例化。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 异步资源实例。
- UniTask LoadAssetAsync(string location, CancellationToken cancellationToken = default, bool needInstance = true, bool needCache = false) where T : Object;
+ UniTask LoadAssetAsync(string location, CancellationToken cancellationToken = default,
+ bool needInstance = true, bool needCache = false, string packageName = "") where T : Object;
///
/// 异步加载游戏物体。
@@ -265,8 +292,10 @@ namespace TEngine
/// 资源定位地址。
/// 取消操作Token。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 异步游戏物体实例。
- UniTask LoadGameObjectAsync(string location, CancellationToken cancellationToken = default, bool needCache = false);
+ UniTask LoadGameObjectAsync(string location, CancellationToken cancellationToken = default,
+ bool needCache = false, string packageName = "");
///
/// 异步加载游戏物体。
@@ -275,16 +304,20 @@ namespace TEngine
/// 父节点位置。
/// 取消操作Token。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 异步游戏物体实例。
- UniTask LoadGameObjectAsync(string location, Transform parent, CancellationToken cancellationToken = default, bool needCache = false);
+ UniTask LoadGameObjectAsync(string location, Transform parent,
+ CancellationToken cancellationToken = default, bool needCache = false, string packageName = "");
///
/// 异步加载原生文件。
///
/// 资源定位地址。
/// 取消操作Token。
+ /// 指定资源包的名称。不传使用默认资源包
/// 原生文件资源实例。
- UniTask LoadRawAssetAsync(string location, CancellationToken cancellationToken = default);
+ UniTask LoadRawAssetAsync(string location,
+ CancellationToken cancellationToken = default, string packageName = "");
///
/// 异步加载子文件。
@@ -292,32 +325,38 @@ namespace TEngine
/// 资源定位地址。
/// 子资源名称。
/// 取消操作Token。
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源实例类型。
/// 原生文件资源实例。
- UniTask LoadSubAssetAsync(string location, string assetName, CancellationToken cancellationToken = default) where T : Object;
+ UniTask LoadSubAssetAsync(string location, string assetName,
+ CancellationToken cancellationToken = default, string packageName = "") where T : Object;
///
/// 异步加载所有子文件。
///
/// 资源定位地址。
/// 取消操作Token。
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源实例类型。
/// 原生文件资源实例。
- UniTask LoadAllSubAssetAsync(string location, CancellationToken cancellationToken = default) where T : Object;
+ UniTask LoadAllSubAssetAsync(string location, CancellationToken cancellationToken = default,
+ string packageName = "") where T : Object;
///
/// 放入预加载对象。
///
/// 资源定位地址。
/// 预加载对象。
- public void PushPreLoadAsset(string location, Object assetObject);
+ /// 指定资源包的名称。不传使用默认资源包
+ public void PushPreLoadAsset(string location, Object assetObject, string packageName = "");
///
/// 获取预加载的实例对象。
///
/// 资源定位地址。
/// 资源实例类型。
+ /// 指定资源包的名称。不传使用默认资源包
/// 预加载对象。
- public T GetPreLoadAsset(string location) where T : Object;
+ public T GetPreLoadAsset(string location, string packageName = "") where T : Object;
}
}
\ No newline at end of file
diff --git a/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/Operation/LoadAssetsByTagOperation.cs b/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/Operation/LoadAssetsByTagOperation.cs
index 57e98bc4..f8e20771 100644
--- a/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/Operation/LoadAssetsByTagOperation.cs
+++ b/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/Operation/LoadAssetsByTagOperation.cs
@@ -19,6 +19,7 @@ namespace TEngine
}
private readonly string _tag;
+ private readonly string _packageName; // 指定资源包的名称
private ESteps _steps = ESteps.None;
private List _handles;
@@ -28,9 +29,10 @@ namespace TEngine
public List AssetObjects { private set; get; }
- public LoadAssetsByTagOperation(string tag)
+ public LoadAssetsByTagOperation(string tag, string packageName)
{
_tag = tag;
+ _packageName = packageName;
}
protected override void OnStart()
@@ -45,11 +47,32 @@ namespace TEngine
if (_steps == ESteps.LoadAssets)
{
- AssetInfo[] assetInfos = YooAssets.GetAssetInfos(_tag);
+ AssetInfo[] assetInfos;
+ if (string.IsNullOrEmpty(_packageName))
+ {
+ assetInfos = YooAssets.GetAssetInfos(_tag);
+ }
+ else
+ {
+ var package = YooAssets.GetPackage(_packageName);
+ assetInfos = package.GetAssetInfos(_tag);
+ }
+
_handles = new List(assetInfos.Length);
+
foreach (var assetInfo in assetInfos)
{
- var handle = YooAssets.LoadAssetAsync(assetInfo);
+ AssetOperationHandle handle;
+ if (string.IsNullOrEmpty(_packageName))
+ {
+ handle = YooAssets.LoadAssetAsync(assetInfo);
+ }
+ else
+ {
+ var package = YooAssets.GetPackage(_packageName);
+ handle = package.LoadAssetAsync(assetInfo);
+ }
+
_handles.Add(handle);
}
@@ -101,7 +124,7 @@ namespace TEngine
SetFinish(true);
}
}
-
+
private void SetFinish(bool succeed, string error = "")
{
Error = error;
diff --git a/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/ResourceManager.cs b/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/ResourceManager.cs
index 51944452..9c172386 100644
--- a/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/ResourceManager.cs
+++ b/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/ResourceManager.cs
@@ -101,9 +101,9 @@ namespace TEngine
internal override void Shutdown()
{
- ReleasePreLoadAssets(isShutDown:true);
+ ReleasePreLoadAssets(isShutDown: true);
#if !UNITY_WEBGL
- YooAssets.Destroy();
+ YooAssets.Destroy();
#endif
ResourcePool.Destroy();
}
@@ -120,6 +120,7 @@ namespace TEngine
handle = null;
}
}
+
iter.Dispose();
_releaseMaps.Clear();
@@ -133,10 +134,12 @@ namespace TEngine
handle = null;
}
}
+
iter.Dispose();
_operationHandlesMaps.Clear();
-
- _arcCacheTable = new ArcCacheTable(ARCTableCapacity, OnAddAsset, OnRemoveAsset);
+
+ _arcCacheTable =
+ new ArcCacheTable(ARCTableCapacity, OnAddAsset, OnRemoveAsset);
}
#endregion
@@ -205,25 +208,47 @@ namespace TEngine
///
/// 资源定位地址。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源类型。
/// 资源句柄。
- private AssetOperationHandle GetHandleSync(string location, bool needCache = false) where T : Object
+ private AssetOperationHandle GetHandleSync(string location, bool needCache = false, string packageName = "")
+ where T : Object
{
if (!needCache)
{
- return YooAssets.LoadAssetSync(location);
+ if (string.IsNullOrEmpty(packageName))
+ {
+ return YooAssets.LoadAssetSync(location);
+ }
+
+ var package = YooAssets.GetPackage(packageName);
+ return package.LoadAssetSync(location);
}
+
+ // 缓存key
+ var cacheKey = string.IsNullOrEmpty(packageName) || packageName.Equals(PackageName)
+ ? location
+ : $"{packageName}/{location}";
+
AssetOperationHandle handle = null;
// 尝试从从ARC缓存表取出对象。
- handle = _arcCacheTable.GetCache(location);
+ handle = _arcCacheTable.GetCache(cacheKey);
if (handle == null)
{
- handle = YooAssets.LoadAssetSync(location);
+ if (string.IsNullOrEmpty(packageName))
+ {
+ handle = YooAssets.LoadAssetSync(location);
+ }
+ else
+ {
+ var package = YooAssets.GetPackage(packageName);
+ handle = package.LoadAssetSync(location);
+ }
}
// 对象推入ARC缓存表。
- _arcCacheTable.PutCache(location, handle);
+ _arcCacheTable.PutCache(cacheKey, handle);
return handle;
}
@@ -232,25 +257,47 @@ namespace TEngine
///
/// 资源定位地址。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源类型。
/// 资源句柄。
- private AssetOperationHandle GetHandleAsync(string location, bool needCache = false) where T : Object
+ private AssetOperationHandle GetHandleAsync(string location, bool needCache = false, string packageName = "")
+ where T : Object
{
if (!needCache)
{
- return YooAssets.LoadAssetAsync(location);
+ if (string.IsNullOrEmpty(packageName))
+ {
+ return YooAssets.LoadAssetAsync(location);
+ }
+
+ var package = YooAssets.GetPackage(packageName);
+ return package.LoadAssetAsync(location);
}
+
+ // 缓存key
+ var cacheKey = string.IsNullOrEmpty(packageName) || packageName.Equals(PackageName)
+ ? location
+ : $"{packageName}/{location}";
+
AssetOperationHandle handle = null;
// 尝试从从ARC缓存表取出对象。
- handle = _arcCacheTable.GetCache(location);
+ handle = _arcCacheTable.GetCache(cacheKey);
if (handle == null)
{
- handle = YooAssets.LoadAssetAsync(location);
+ if (string.IsNullOrEmpty(packageName))
+ {
+ handle = YooAssets.LoadAssetAsync(location);
+ }
+ else
+ {
+ var package = YooAssets.GetPackage(packageName);
+ handle = package.LoadAssetAsync(location);
+ }
}
// 对象推入ARC缓存表。
- _arcCacheTable.PutCache(location, handle);
+ _arcCacheTable.PutCache(cacheKey, handle);
return handle;
}
@@ -277,7 +324,8 @@ namespace TEngine
_releaseMaps ??= new Dictionary(ARCTableCapacity);
_operationHandlesMaps ??= new Dictionary(ARCTableCapacity);
- _arcCacheTable ??= new ArcCacheTable(ARCTableCapacity, OnAddAsset, OnRemoveAsset);
+ _arcCacheTable ??=
+ new ArcCacheTable(ARCTableCapacity, OnAddAsset, OnRemoveAsset);
}
///
@@ -402,19 +450,29 @@ namespace TEngine
#endif
}
- ///
- /// 检查资源是否存在。
- ///
- /// 要检查资源的名称。
- /// 检查资源是否存在的结果。
- public HasAssetResult HasAsset(string location)
+ ///
+ public HasAssetResult HasAsset(string location, string packageName = "")
{
if (string.IsNullOrEmpty(location))
{
throw new GameFrameworkException("Asset name is invalid.");
}
- AssetInfo assetInfo = YooAssets.GetAssetInfo(location);
+ AssetInfo assetInfo;
+ if (string.IsNullOrEmpty(packageName))
+ {
+ assetInfo = YooAssets.GetAssetInfo(location);
+ }
+ else
+ {
+ var package = YooAssets.GetPackage(packageName);
+ if (package == null)
+ {
+ throw new GameFrameworkException($"The package does not exist. Package Name :{packageName}");
+ }
+
+ assetInfo = package.GetAssetInfo(location);
+ }
if (!CheckLocationValid(location))
{
@@ -445,74 +503,95 @@ namespace TEngine
#region 资源信息
- ///
- /// 是否需要从远端更新下载。
- ///
- /// 资源的定位地址
- public bool IsNeedDownloadFromRemote(string location)
+ ///
+ public bool IsNeedDownloadFromRemote(string location, string packageName = "")
{
- return YooAssets.IsNeedDownloadFromRemote(location);
+ if (string.IsNullOrEmpty(packageName))
+ {
+ return YooAssets.IsNeedDownloadFromRemote(location);
+ }
+ else
+ {
+ var package = YooAssets.GetPackage(packageName);
+ return package.IsNeedDownloadFromRemote(location);
+ }
}
- ///
- /// 是否需要从远端更新下载。
- ///
- /// 资源信息。
- public bool IsNeedDownloadFromRemote(AssetInfo assetInfo)
+ ///
+ public bool IsNeedDownloadFromRemote(AssetInfo assetInfo, string packageName = "")
{
- return YooAssets.IsNeedDownloadFromRemote(assetInfo);
+ if (string.IsNullOrEmpty(packageName))
+ {
+ return YooAssets.IsNeedDownloadFromRemote(assetInfo);
+ }
+ else
+ {
+ var package = YooAssets.GetPackage(packageName);
+ return package.IsNeedDownloadFromRemote(assetInfo);
+ }
}
- ///
- /// 获取资源信息列表。
- ///
- /// 资源标签。
- /// 资源信息列表。
- public AssetInfo[] GetAssetInfos(string tag)
+ ///
+ public AssetInfo[] GetAssetInfos(string tag, string packageName = "")
{
- return YooAssets.GetAssetInfos(tag);
+ if (string.IsNullOrEmpty(packageName))
+ {
+ return YooAssets.GetAssetInfos(tag);
+ }
+ else
+ {
+ var package = YooAssets.GetPackage(packageName);
+ return package.GetAssetInfos(tag);
+ }
}
- ///
- /// 获取资源信息列表。
- ///
- /// 资源标签列表。
- /// 资源信息列表。
- public AssetInfo[] GetAssetInfos(string[] tags)
+ ///
+ public AssetInfo[] GetAssetInfos(string[] tags, string packageName = "")
{
- return YooAssets.GetAssetInfos(tags);
+ if (string.IsNullOrEmpty(packageName))
+ {
+ return YooAssets.GetAssetInfos(tags);
+ }
+ else
+ {
+ var package = YooAssets.GetPackage(packageName);
+ return package.GetAssetInfos(tags);
+ }
}
- ///
- /// 获取资源信息。
- ///
- /// 资源的定位地址。
- /// 资源信息。
- public AssetInfo GetAssetInfo(string location)
+ ///
+ public AssetInfo GetAssetInfo(string location, string packageName = "")
{
- return YooAssets.GetAssetInfo(location);
+ if (string.IsNullOrEmpty(packageName))
+ {
+ return YooAssets.GetAssetInfo(location);
+ }
+ else
+ {
+ var package = YooAssets.GetPackage(packageName);
+ return package.GetAssetInfo(location);
+ }
}
- ///
- /// 检查资源定位地址是否有效。
- ///
- /// 资源的定位地址。
- public bool CheckLocationValid(string location)
+ ///
+ public bool CheckLocationValid(string location, string packageName = "")
{
- return YooAssets.CheckLocationValid(location);
+ if (string.IsNullOrEmpty(packageName))
+ {
+ return YooAssets.CheckLocationValid(location);
+ }
+ else
+ {
+ var package = YooAssets.GetPackage(packageName);
+ return package.CheckLocationValid(location);
+ }
}
#endregion
- ///
- /// 同步加载资源。
- ///
- /// 资源的定位地址。
- /// 是否需要实例化。
- /// 是否需要缓存。
- /// 要加载资源的类型。
- /// 资源实例。
- public T LoadAsset(string location, bool needInstance = true, bool needCache = false) where T : Object
+ ///
+ public T LoadAsset(string location, bool needInstance = true, bool needCache = false,
+ string packageName = "") where T : Object
{
if (string.IsNullOrEmpty(location))
{
@@ -520,7 +599,7 @@ namespace TEngine
return default;
}
- AssetOperationHandle handle = GetHandleSync(location, needCache);
+ AssetOperationHandle handle = GetHandleSync(location, needCache, packageName);
if (typeof(T) == typeof(GameObject))
{
@@ -529,30 +608,26 @@ namespace TEngine
GameObject gameObject = handle.InstantiateSync();
if (!needCache)
{
- AssetReference.BindAssetReference(gameObject, handle, location);
+ AssetReference.BindAssetReference(gameObject, handle, location, packageName: packageName);
}
+
return gameObject as T;
}
}
-
+
T ret = handle.AssetObject as T;
if (!needCache)
{
handle.Dispose();
}
+
return ret;
}
- ///
- /// 同步加载资源。
- ///
- /// 资源的定位地址。
- /// 父节点位置。
- /// 是否需要实例化。
- /// 是否需要缓存。
- /// 要加载资源的类型。
- /// 资源实例。
- public T LoadAsset(string location, Transform parent, bool needInstance = true, bool needCache = false) where T : Object
+ ///
+ public T LoadAsset(string location, Transform parent, bool needInstance = true, bool needCache = false,
+ string packageName = "")
+ where T : Object
{
if (string.IsNullOrEmpty(location))
{
@@ -560,7 +635,7 @@ namespace TEngine
return default;
}
- AssetOperationHandle handle = GetHandleSync(location, needCache);
+ AssetOperationHandle handle = GetHandleSync(location, needCache, packageName: packageName);
if (typeof(T) == typeof(GameObject))
{
@@ -569,31 +644,27 @@ namespace TEngine
GameObject gameObject = handle.InstantiateSync(parent);
if (!needCache)
{
- AssetReference.BindAssetReference(gameObject, handle, location);
+ AssetReference.BindAssetReference(gameObject, handle, location, packageName: packageName);
}
+
return gameObject as T;
}
}
-
+
T ret = handle.AssetObject as T;
if (!needCache)
{
handle.Dispose();
}
+
return ret;
}
- ///
- /// 同步加载资源。
- ///
- /// 资源操作句柄。
- /// 资源的定位地址。
- /// 是否需要缓存。
- /// 要加载资源的类型。
- /// 资源实例。
- public T LoadAsset(string location, out AssetOperationHandle handle, bool needCache = false) where T : Object
+ ///
+ public T LoadAsset(string location, out AssetOperationHandle handle, bool needCache = false,
+ string packageName = "") where T : Object
{
- handle = GetHandleSync(location, needCache);
+ handle = GetHandleSync(location, needCache, packageName: packageName);
if (string.IsNullOrEmpty(location))
{
Log.Error("Asset name is invalid.");
@@ -605,31 +676,26 @@ namespace TEngine
GameObject gameObject = handle.InstantiateSync();
if (!needCache)
{
- AssetReference.BindAssetReference(gameObject, handle, location);
+ AssetReference.BindAssetReference(gameObject, handle, location, packageName: packageName);
}
+
return gameObject as T;
}
-
+
T ret = handle.AssetObject as T;
if (!needCache)
{
handle.Dispose();
}
+
return ret;
}
- ///
- /// 同步加载资源。
- ///
- /// 资源的定位地址。
- /// 资源操作句柄。
- /// 是否需要缓存。
- /// 父节点位置。
- /// 要加载资源的类型。
- /// 资源实例。
- public T LoadAsset(string location, Transform parent, out AssetOperationHandle handle, bool needCache = false) where T : Object
+ ///
+ public T LoadAsset(string location, Transform parent, out AssetOperationHandle handle,
+ bool needCache = false, string packageName = "") where T : Object
{
- handle = GetHandleSync(location, needCache);
+ handle = GetHandleSync(location, needCache, packageName: packageName);
if (string.IsNullOrEmpty(location))
{
@@ -642,81 +708,78 @@ namespace TEngine
GameObject gameObject = handle.InstantiateSync(parent);
if (!needCache)
{
- AssetReference.BindAssetReference(gameObject, handle, location);
+ AssetReference.BindAssetReference(gameObject, handle, location, packageName: packageName);
}
+
return gameObject as T;
}
-
+
T ret = handle.AssetObject as T;
if (!needCache)
{
handle.Dispose();
}
+
return ret;
}
- ///
- /// 同步加载资源并获取句柄。
- ///
- /// 资源的定位地址。
- /// 是否需要缓存。
- /// 要加载资源的类型。
- /// 同步加载资源句柄。
- public AssetOperationHandle LoadAssetGetOperation(string location, bool needCache = false) where T : Object
+ ///
+ public AssetOperationHandle LoadAssetGetOperation(string location, bool needCache = false,
+ string packageName = "") where T : Object
{
- return GetHandleSync(location, needCache);
+ return GetHandleSync(location, needCache, packageName: packageName);
}
- ///
- /// 异步加载资源并获取句柄。
- ///
- /// 资源的定位地址。
- /// 是否需要缓存。
- /// 要加载资源的类型。
- /// 异步加载资源句柄。
- public AssetOperationHandle LoadAssetAsyncHandle(string location, bool needCache = false) where T : Object
+ ///
+ public AssetOperationHandle LoadAssetAsyncHandle(string location, bool needCache = false,
+ string packageName = "") where T : Object
{
- return GetHandleAsync(location, needCache);
+ return GetHandleAsync(location, needCache, packageName: packageName);
}
- ///
- /// 同步加载子资源对象
- ///
- /// 资源类型。
- /// 资源的定位地址。
- public SubAssetsOperationHandle LoadSubAssetsSync(string location) where TObject : Object
+ ///
+ public SubAssetsOperationHandle LoadSubAssetsSync(string location, string packageName = "")
+ where TObject : Object
{
- return YooAssets.LoadSubAssetsSync(location: location);
+ if (string.IsNullOrEmpty(packageName))
+ {
+ return YooAssets.LoadSubAssetsSync(location: location);
+ }
+
+ var package = YooAssets.GetPackage(packageName);
+ return package.LoadSubAssetsSync(location);
}
- ///
- /// 异步加载子资源对象
- ///
- /// 资源类型。
- /// 资源的定位地址。
- public SubAssetsOperationHandle LoadSubAssetsAsync(string location) where TObject : Object
+ ///
+ public SubAssetsOperationHandle LoadSubAssetsAsync(string location, string packageName = "")
+ where TObject : Object
{
- return YooAssets.LoadSubAssetsAsync(location: location);
+ if (string.IsNullOrEmpty(packageName))
+ {
+ return YooAssets.LoadSubAssetsAsync(location: location);
+ }
+
+ var package = YooAssets.GetPackage(packageName);
+ return package.LoadSubAssetsAsync(location: location);
}
- ///
- /// 同步加载子资源对象
- ///
- /// 资源信息。
- public SubAssetsOperationHandle LoadSubAssetsSync(AssetInfo assetInfo)
+ ///
+ public SubAssetsOperationHandle LoadSubAssetsSync(AssetInfo assetInfo, string packageName = "")
{
- return YooAssets.LoadSubAssetsSync(assetInfo);
+ if (string.IsNullOrEmpty(packageName))
+ {
+ return YooAssets.LoadSubAssetsSync(assetInfo);
+ }
+
+ var package = YooAssets.GetPackage(packageName);
+ return package.LoadSubAssetsSync(assetInfo);
}
- ///
- /// 通过Tag加载资源对象集合。
- ///
- /// 资源标识。
- /// 资源类型。
- /// 资源对象集合。
- public async UniTask> LoadAssetsByTagAsync(string assetTag) where T : UnityEngine.Object
+ ///
+ public async UniTask> LoadAssetsByTagAsync(string assetTag, string packageName = "")
+ where T : UnityEngine.Object
{
- LoadAssetsByTagOperation operation = new LoadAssetsByTagOperation(assetTag);
+ LoadAssetsByTagOperation operation = new LoadAssetsByTagOperation(assetTag, packageName);
YooAssets.StartOperation(operation);
await operation.ToUniTask();
List assetObjects = operation.AssetObjects;
@@ -724,19 +787,14 @@ namespace TEngine
return assetObjects;
}
- ///
- /// 异步加载资源实例。
- ///
- /// 要加载的实例名称。
- /// 取消操作Token。
- /// 是否需要实例化。
- /// 是否需要缓存。
- /// 资源实实例。
- public async UniTask LoadAssetAsync(string location, CancellationToken cancellationToken = default, bool needInstance = true, bool needCache = false) where T : Object
+ ///
+ public async UniTask LoadAssetAsync(string location, CancellationToken cancellationToken = default,
+ bool needInstance = true, bool needCache = false, string packageName = "") where T : Object
{
- AssetOperationHandle handle = LoadAssetAsyncHandle(location, needCache);
+ AssetOperationHandle handle = LoadAssetAsyncHandle(location, needCache, packageName: packageName);
- bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken).SuppressCancellationThrow();
+ bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken)
+ .SuppressCancellationThrow();
if (cancelOrFailed)
{
@@ -750,32 +808,31 @@ namespace TEngine
GameObject gameObject = handle.InstantiateSync();
if (!needCache)
{
- AssetReference.BindAssetReference(gameObject, handle, location);
+ AssetReference.BindAssetReference(gameObject, handle, location, packageName: packageName);
}
+
return gameObject as T;
}
}
-
+
T ret = handle.AssetObject as T;
if (!needCache)
{
handle.Dispose();
}
+
return ret;
}
- ///
- /// 异步加载游戏物体。
- ///
- /// 要加载的游戏物体名称。
- /// 取消操作Token。
- /// 是否需要缓存。
- /// 异步游戏物体实例。
- public async UniTask LoadGameObjectAsync(string location, CancellationToken cancellationToken = default, bool needCache = false)
+ ///
+ public async UniTask LoadGameObjectAsync(string location,
+ CancellationToken cancellationToken = default, bool needCache = false, string packageName = "")
{
- AssetOperationHandle handle = LoadAssetAsyncHandle(location, needCache);
+ AssetOperationHandle handle =
+ LoadAssetAsyncHandle(location, needCache, packageName: packageName);
- bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken).SuppressCancellationThrow();
+ bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken)
+ .SuppressCancellationThrow();
if (cancelOrFailed)
{
@@ -785,22 +842,18 @@ namespace TEngine
GameObject gameObject = handle.InstantiateSync();
if (!needCache)
{
- AssetReference.BindAssetReference(gameObject, handle, location);
+ AssetReference.BindAssetReference(gameObject, handle, location, packageName: packageName);
}
+
return gameObject;
}
- ///
- /// 异步加载游戏物体。
- ///
- /// 资源定位地址。
- /// 父节点位置。
- /// 取消操作Token。
- /// 是否需要缓存。
- /// 异步游戏物体实例。
- public async UniTask LoadGameObjectAsync(string location, Transform parent, CancellationToken cancellationToken = default, bool needCache = false)
+ ///
+ public async UniTask LoadGameObjectAsync(string location, Transform parent,
+ CancellationToken cancellationToken = default, bool needCache = false, string packageName = "")
{
- GameObject gameObject = await LoadGameObjectAsync(location, cancellationToken, needCache);
+ GameObject gameObject =
+ await LoadGameObjectAsync(location, cancellationToken, needCache, packageName: packageName);
if (parent != null)
{
gameObject.transform.SetParent(parent);
@@ -813,103 +866,116 @@ namespace TEngine
return gameObject;
}
- ///
- /// 异步加载原生文件。
- ///
- /// 资源定位地址。
- /// 取消操作Token。
- /// 原生文件资源实例操作句柄。
- /// 需要自行释放资源句柄(RawFileOperationHandle)。
- public async UniTask LoadRawAssetAsync(string location, CancellationToken cancellationToken = default)
+ ///
+ public async UniTask LoadRawAssetAsync(string location,
+ CancellationToken cancellationToken = default, string packageName = "")
{
- RawFileOperationHandle handle = YooAssets.LoadRawFileAsync(location);
+ RawFileOperationHandle handle;
+ if (string.IsNullOrEmpty(packageName))
+ {
+ handle = YooAssets.LoadRawFileAsync(location);
+ }
+ else
+ {
+ var package = YooAssets.GetPackage(packageName);
+ handle = package.LoadRawFileAsync(location);
+ }
- bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken).SuppressCancellationThrow();
+ bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken)
+ .SuppressCancellationThrow();
return cancelOrFailed ? null : handle;
}
- ///
- /// 异步加载子文件。
- ///
- /// 资源定位地址。
- /// 子资源名称。
- /// 取消操作Token。
- /// 资源实例类型。
- /// 原生文件资源实例。
- public async UniTask LoadSubAssetAsync(string location, string assetName, CancellationToken cancellationToken = default) where T : Object
+ ///
+ public async UniTask LoadSubAssetAsync(string location, string assetName,
+ CancellationToken cancellationToken = default, string packageName = "") where T : Object
{
- var assetInfo = GetAssetInfo(location);
+ var assetInfo = GetAssetInfo(location, packageName: packageName);
if (assetInfo == null)
{
Log.Fatal($"AssetsInfo is null");
return null;
}
- SubAssetsOperationHandle handle = YooAssets.LoadSubAssetsAsync(assetInfo);
+ SubAssetsOperationHandle handle;
+ if (string.IsNullOrEmpty(packageName))
+ {
+ handle = YooAssets.LoadSubAssetsAsync(assetInfo);
+ }
+ else
+ {
+ var package = YooAssets.GetPackage(packageName);
+ handle = package.LoadSubAssetsAsync(assetInfo);
+ }
- bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken).SuppressCancellationThrow();
+ bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken)
+ .SuppressCancellationThrow();
handle.Dispose();
return cancelOrFailed ? null : handle.GetSubAssetObject(assetName);
}
- ///
- /// 异步加载子文件。
- ///
- /// 资源定位地址。
- /// 取消操作Token。
- /// 资源实例类型。
- /// 原生文件资源实例。
- public async UniTask LoadAllSubAssetAsync(string location, CancellationToken cancellationToken = default) where T : Object
+ ///
+ public async UniTask LoadAllSubAssetAsync(string location,
+ CancellationToken cancellationToken = default, string packageName = "") where T : Object
{
- var assetInfo = GetAssetInfo(location);
+ var assetInfo = GetAssetInfo(location, packageName: packageName);
if (assetInfo == null)
{
Log.Fatal($"AssetsInfo is null");
return null;
}
- SubAssetsOperationHandle handle = YooAssets.LoadSubAssetsAsync(assetInfo);
+ SubAssetsOperationHandle handle;
+ if (string.IsNullOrEmpty(packageName))
+ {
+ handle = YooAssets.LoadSubAssetsAsync(assetInfo);
+ }
+ else
+ {
+ var package = YooAssets.GetPackage(packageName);
+ handle = package.LoadSubAssetsAsync(assetInfo);
+ }
- bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken).SuppressCancellationThrow();
+ bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken)
+ .SuppressCancellationThrow();
handle.Dispose();
return cancelOrFailed ? null : handle.GetSubAssetObjects();
}
-
+
#region 预加载
private readonly Dictionary _preLoadMaps = new Dictionary();
-
- ///
- /// 放入预加载对象。
- ///
- /// 资源定位地址。
- /// 预加载对象。
- public void PushPreLoadAsset(string location, Object assetObject)
+
+ ///
+ public void PushPreLoadAsset(string location, Object assetObject, string packageName = "")
{
- if (_preLoadMaps.ContainsKey(location))
+ var cacheKey = string.IsNullOrEmpty(packageName) || packageName.Equals(PackageName)
+ ? location
+ : $"{packageName}/{location}";
+ if (_preLoadMaps.ContainsKey(cacheKey))
{
return;
}
- _preLoadMaps.Add(location, assetObject);
+
+ _preLoadMaps.Add(cacheKey, assetObject);
}
- ///
- /// 获取预加载的实例对象。
- ///
- /// 资源定位地址。
- /// 资源实例类型。
- /// 预加载对象。
- public T GetPreLoadAsset(string location) where T : Object
+ ///
+ public T GetPreLoadAsset(string location, string packageName = "") where T : Object
{
- if (_preLoadMaps.TryGetValue(location,out Object assetObject))
+ var cacheKey = string.IsNullOrEmpty(packageName) || packageName.Equals(PackageName)
+ ? location
+ : $"{packageName}/{location}";
+ if (_preLoadMaps.TryGetValue(cacheKey, out Object assetObject))
{
return assetObject as T;
}
+
return default;
}
@@ -927,8 +993,10 @@ namespace TEngine
}
}
}
+
_preLoadMaps.Clear();
}
+
#endregion
}
}
\ No newline at end of file
diff --git a/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/ResourceModule.cs b/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/ResourceModule.cs
index 8513c529..919a1d62 100644
--- a/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/ResourceModule.cs
+++ b/UnityProject/Assets/TEngine/Runtime/Modules/ResourceModule/ResourceModule.cs
@@ -239,10 +239,13 @@ namespace TEngine
///
/// 获取当前资源包版本。
///
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源包版本。
- public string GetPackageVersion()
+ public string GetPackageVersion(string packageName = "")
{
- var package = YooAssets.GetPackage(packageName);
+ var package = string.IsNullOrEmpty(packageName)
+ ? YooAssets.GetPackage(this.packageName)
+ : YooAssets.GetPackage(packageName);
if (package == null)
{
return string.Empty;
@@ -256,10 +259,14 @@ namespace TEngine
///
/// 请求URL是否需要带时间戳。
/// 超时时间。
+ /// 指定资源包的名称。不传使用默认资源包
/// 请求远端包裹的最新版本操作句柄。
- public UpdatePackageVersionOperation UpdatePackageVersionAsync(bool appendTimeTicks = false, int timeout = 60)
+ public UpdatePackageVersionOperation UpdatePackageVersionAsync(bool appendTimeTicks = false, int timeout = 60,
+ string packageName = "")
{
- var package = YooAssets.GetPackage(packageName);
+ var package = string.IsNullOrEmpty(packageName)
+ ? YooAssets.GetPackage(this.packageName)
+ : YooAssets.GetPackage(packageName);
return package.UpdatePackageVersionAsync(appendTimeTicks, timeout);
}
@@ -269,37 +276,57 @@ namespace TEngine
/// 更新的包裹版本
/// 更新成功后自动保存版本号,作为下次初始化的版本。
/// 超时时间(默认值:60秒)
- public UpdatePackageManifestOperation UpdatePackageManifestAsync(string packageVersion, bool autoSaveVersion = true, int timeout = 60)
+ /// 指定资源包的名称。不传使用默认资源包
+ public UpdatePackageManifestOperation UpdatePackageManifestAsync(string packageVersion,
+ bool autoSaveVersion = true, int timeout = 60, string packageName = "")
{
- var package = YooAssets.GetPackage(packageName);
+ var package = string.IsNullOrEmpty(packageName)
+ ? YooAssets.GetPackage(this.packageName)
+ : YooAssets.GetPackage(packageName);
return package.UpdatePackageManifestAsync(packageVersion, autoSaveVersion, timeout);
}
///
/// 创建资源下载器,用于下载当前资源版本所有的资源包文件。
///
- public ResourceDownloaderOperation CreateResourceDownloader()
+ /// 指定资源包的名称。不传使用默认资源包
+ public ResourceDownloaderOperation CreateResourceDownloader(string packageName = "")
{
- var package = YooAssets.GetPackage(packageName);
- Downloader = package.CreateResourceDownloader(downloadingMaxNum, failedTryAgain);
- return Downloader;
+ if (string.IsNullOrEmpty(packageName))
+ {
+ var package = YooAssets.GetPackage(this.packageName);
+ Downloader = package.CreateResourceDownloader(downloadingMaxNum, failedTryAgain);
+ return Downloader;
+ }
+ else
+ {
+ var package = YooAssets.GetPackage(packageName);
+ Downloader = package.CreateResourceDownloader(downloadingMaxNum, failedTryAgain);
+ return Downloader;
+ }
}
///
/// 清理包裹未使用的缓存文件。
///
- public ClearUnusedCacheFilesOperation ClearUnusedCacheFilesAsync()
+ /// 指定资源包的名称。不传使用默认资源包
+ public ClearUnusedCacheFilesOperation ClearUnusedCacheFilesAsync(string packageName = "")
{
- var package = YooAssets.GetPackage(packageName);
+ var package = string.IsNullOrEmpty(packageName)
+ ? YooAssets.GetPackage(this.packageName)
+ : YooAssets.GetPackage(packageName);
return package.ClearUnusedCacheFilesAsync();
}
///
/// 清理沙盒路径。
///
- public void ClearSandbox()
+ /// 指定资源包的名称。不传使用默认资源包
+ public void ClearSandbox(string packageName = "")
{
- var package = YooAssets.GetPackage(packageName);
+ var package = string.IsNullOrEmpty(packageName)
+ ? YooAssets.GetPackage(this.packageName)
+ : YooAssets.GetPackage(packageName);
package.ClearPackageSandbox();
}
@@ -341,10 +368,11 @@ namespace TEngine
private void Update()
{
m_LastUnloadUnusedAssetsOperationElapseSeconds += GameTime.unscaledDeltaTime;
- if (m_AsyncOperation == null &&
- (m_ForceUnloadUnusedAssets ||
- m_LastUnloadUnusedAssetsOperationElapseSeconds >= maxUnloadUnusedAssetsInterval ||
- m_PreorderUnloadUnusedAssets && m_LastUnloadUnusedAssetsOperationElapseSeconds >= minUnloadUnusedAssetsInterval))
+ if (m_AsyncOperation == null &&
+ (m_ForceUnloadUnusedAssets ||
+ m_LastUnloadUnusedAssetsOperationElapseSeconds >= maxUnloadUnusedAssetsInterval ||
+ m_PreorderUnloadUnusedAssets &&
+ m_LastUnloadUnusedAssetsOperationElapseSeconds >= minUnloadUnusedAssetsInterval))
{
Log.Info("Unload unused assets...");
m_ForceUnloadUnusedAssets = false;
@@ -370,10 +398,11 @@ namespace TEngine
/// 检查资源是否存在。
///
/// 要检查资源的名称。
+ /// 指定资源包的名称。不传使用默认资源包
/// 检查资源是否存在的结果。
- public HasAssetResult HasAsset(string location)
+ public HasAssetResult HasAsset(string location, string packageName = "")
{
- return m_ResourceManager.HasAsset(location);
+ return m_ResourceManager.HasAsset(location, packageName: packageName);
}
///
@@ -389,59 +418,65 @@ namespace TEngine
/// 是否需要从远端更新下载。
///
/// 资源的定位地址。
+ /// 指定资源包的名称。不传使用默认资源包
///
- public bool IsNeedDownloadFromRemote(string location)
+ public bool IsNeedDownloadFromRemote(string location, string packageName = "")
{
- return m_ResourceManager.IsNeedDownloadFromRemote(location);
+ return m_ResourceManager.IsNeedDownloadFromRemote(location, packageName: packageName);
}
///
/// 是否需要从远端更新下载。
///
/// 资源信息。
+ /// 指定资源包的名称。不传使用默认资源包
///
- public bool IsNeedDownloadFromRemote(AssetInfo assetInfo)
+ public bool IsNeedDownloadFromRemote(AssetInfo assetInfo, string packageName = "")
{
- return m_ResourceManager.IsNeedDownloadFromRemote(assetInfo);
+ return m_ResourceManager.IsNeedDownloadFromRemote(assetInfo, packageName: packageName);
}
///
/// 获取资源信息列表。
///
/// 资源标签。
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源信息列表。
- public AssetInfo[] GetAssetInfos(string resTag)
+ public AssetInfo[] GetAssetInfos(string resTag, string packageName = "")
{
- return m_ResourceManager.GetAssetInfos(resTag);
+ return m_ResourceManager.GetAssetInfos(resTag, packageName: packageName);
}
///
/// 获取资源信息列表。
///
/// 资源标签列表。
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源信息列表。
- public AssetInfo[] GetAssetInfos(string[] tags)
+ public AssetInfo[] GetAssetInfos(string[] tags, string packageName = "")
{
- return m_ResourceManager.GetAssetInfos(tags);
+ return m_ResourceManager.GetAssetInfos(tags, packageName: packageName);
}
///
/// 获取资源信息。
///
/// 资源的定位地址。
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源信息。
- public AssetInfo GetAssetInfo(string location)
+ public AssetInfo GetAssetInfo(string location, string packageName = "")
{
- return m_ResourceManager.GetAssetInfo(location);
+ return m_ResourceManager.GetAssetInfo(location, packageName: packageName);
}
///
/// 检查资源定位地址是否有效。
///
/// 资源的定位地址
- public bool CheckLocationValid(string location)
+ /// 指定资源包的名称。不传使用默认资源包
+ public bool CheckLocationValid(string location, string packageName = "")
{
- return m_ResourceManager.CheckLocationValid(location);
+ return m_ResourceManager.CheckLocationValid(location, packageName: packageName);
}
///
@@ -450,11 +485,13 @@ namespace TEngine
/// 资源的定位地址。
/// 是否需要实例化。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 资源实例。
- public T LoadAsset(string location, bool needInstance = true, bool needCache = false) where T : UnityEngine.Object
+ public T LoadAsset(string location, bool needInstance = true, bool needCache = false,
+ string packageName = "") where T : UnityEngine.Object
{
- return m_ResourceManager.LoadAsset(location, needInstance, needCache);
+ return m_ResourceManager.LoadAsset(location, needInstance, needCache, packageName: packageName);
}
///
@@ -464,11 +501,13 @@ namespace TEngine
/// 父节点位置。
/// 是否需要实例化。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 资源实例。
- public T LoadAsset(string location, Transform parent, bool needInstance = true, bool needCache = false) where T : UnityEngine.Object
+ public T LoadAsset(string location, Transform parent, bool needInstance = true, bool needCache = false,
+ string packageName = "") where T : UnityEngine.Object
{
- return m_ResourceManager.LoadAsset(location, parent, needInstance, needCache);
+ return m_ResourceManager.LoadAsset(location, parent, needInstance, needCache, packageName: packageName);
}
///
@@ -477,11 +516,13 @@ namespace TEngine
/// 资源操作句柄。
/// 资源的定位地址。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 资源实例。
- public T LoadAsset(string location, out AssetOperationHandle handle, bool needCache = false) where T : UnityEngine.Object
+ public T LoadAsset(string location, out AssetOperationHandle handle, bool needCache = false,
+ string packageName = "") where T : UnityEngine.Object
{
- return m_ResourceManager.LoadAsset(location, out handle, needCache);
+ return m_ResourceManager.LoadAsset(location, out handle, needCache, packageName: packageName);
}
///
@@ -491,11 +532,13 @@ namespace TEngine
/// 资源操作句柄。
/// 父节点位置。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 资源实例。
- public T LoadAsset(string location, Transform parent, out AssetOperationHandle handle, bool needCache = false) where T : UnityEngine.Object
+ public T LoadAsset(string location, Transform parent, out AssetOperationHandle handle,
+ bool needCache = false, string packageName = "") where T : UnityEngine.Object
{
- return m_ResourceManager.LoadAsset(location, parent, out handle, needCache);
+ return m_ResourceManager.LoadAsset(location, parent, out handle, needCache, packageName: packageName);
}
///
@@ -504,10 +547,13 @@ namespace TEngine
/// 资源的定位地址。
/// 回调函数。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
- public void LoadAssetAsync(string location, Action callback = null, bool needCache = false) where T : UnityEngine.Object
+ public void LoadAssetAsync(string location, Action callback = null,
+ bool needCache = false, string packageName = "") where T : UnityEngine.Object
{
- AssetOperationHandle handle = m_ResourceManager.LoadAssetAsyncHandle(location, needCache);
+ AssetOperationHandle handle =
+ m_ResourceManager.LoadAssetAsyncHandle(location, needCache, packageName: packageName);
handle.Completed += callback;
}
@@ -517,11 +563,13 @@ namespace TEngine
///
/// 资源的定位地址。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 同步加载资源句柄。
- public AssetOperationHandle LoadAssetGetOperation(string location, bool needCache = false) where T : UnityEngine.Object
+ public AssetOperationHandle LoadAssetGetOperation(string location, bool needCache = false,
+ string packageName = "") where T : UnityEngine.Object
{
- return m_ResourceManager.LoadAssetGetOperation(location, needCache);
+ return m_ResourceManager.LoadAssetGetOperation(location, needCache, packageName: packageName);
}
///
@@ -529,11 +577,13 @@ namespace TEngine
///
/// 资源的定位地址。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 异步加载资源句柄。
- public AssetOperationHandle LoadAssetAsyncHandle(string location, bool needCache = false) where T : UnityEngine.Object
+ public AssetOperationHandle LoadAssetAsyncHandle(string location, bool needCache = false,
+ string packageName = "") where T : UnityEngine.Object
{
- return m_ResourceManager.LoadAssetAsyncHandle(location, needCache);
+ return m_ResourceManager.LoadAssetAsyncHandle(location, needCache, packageName: packageName);
}
@@ -542,9 +592,11 @@ namespace TEngine
///
/// 资源类型
/// 资源的定位地址
- public SubAssetsOperationHandle LoadSubAssetsSync(string location) where TObject : UnityEngine.Object
+ /// 指定资源包的名称。不传使用默认资源包
+ public SubAssetsOperationHandle LoadSubAssetsSync(string location, string packageName = "")
+ where TObject : UnityEngine.Object
{
- return m_ResourceManager.LoadSubAssetsSync(location: location);
+ return m_ResourceManager.LoadSubAssetsSync(location: location, packageName: packageName);
}
///
@@ -552,36 +604,41 @@ namespace TEngine
///
/// 资源类型
/// 资源的定位地址
- public SubAssetsOperationHandle LoadSubAssetsAsync(string location) where TObject : UnityEngine.Object
+ /// 指定资源包的名称。不传使用默认资源包
+ public SubAssetsOperationHandle LoadSubAssetsAsync(string location, string packageName = "")
+ where TObject : UnityEngine.Object
{
- return m_ResourceManager.LoadSubAssetsAsync(location: location);
+ return m_ResourceManager.LoadSubAssetsAsync(location: location, packageName: packageName);
}
///
/// 同步加载子资源对象
///
/// 资源的定位地址
- public SubAssetsOperationHandle LoadSubAssetsSync(string location)
+ /// 指定资源包的名称。不传使用默认资源包
+ public SubAssetsOperationHandle LoadSubAssetsSync(string location, string packageName = "")
{
- var assetInfo = GetAssetInfo(location);
+ var assetInfo = GetAssetInfo(location, packageName: packageName);
if (assetInfo == null)
{
Log.Fatal($"AssetsInfo is null");
return null;
}
- return m_ResourceManager.LoadSubAssetsSync(assetInfo);
+ return m_ResourceManager.LoadSubAssetsSync(assetInfo, packageName: packageName);
}
///
/// 通过Tag加载资源对象集合。
///
/// 资源标识。
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源类型。
/// 资源对象集合。
- public async UniTask> LoadAssetsByTagAsync(string assetTag) where T : UnityEngine.Object
+ public async UniTask> LoadAssetsByTagAsync(string assetTag, string packageName = "")
+ where T : UnityEngine.Object
{
- return await m_ResourceManager.LoadAssetsByTagAsync(assetTag);
+ return await m_ResourceManager.LoadAssetsByTagAsync(assetTag, packageName: packageName);
}
///
@@ -591,11 +648,14 @@ namespace TEngine
/// 取消操作Token。
/// 是否需要实例化。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 要加载资源的类型。
/// 异步资源实例。
- public async UniTask LoadAssetAsync(string location, CancellationToken cancellationToken = default, bool needInstance = true, bool needCache = false) where T : UnityEngine.Object
+ public async UniTask LoadAssetAsync(string location, CancellationToken cancellationToken = default,
+ bool needInstance = true, bool needCache = false, string packageName = "") where T : UnityEngine.Object
{
- return await m_ResourceManager.LoadAssetAsync(location, cancellationToken, needInstance, needCache);
+ return await m_ResourceManager.LoadAssetAsync(location, cancellationToken, needInstance, needCache,
+ packageName: packageName);
}
///
@@ -604,10 +664,13 @@ namespace TEngine
/// 要加载的游戏物体名称。
/// 取消操作Token。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 异步游戏物体实例。
- public async UniTask LoadGameObjectAsync(string location, CancellationToken cancellationToken = default, bool needCache = false)
+ public async UniTask LoadGameObjectAsync(string location,
+ CancellationToken cancellationToken = default, bool needCache = false, string packageName = "")
{
- return await m_ResourceManager.LoadGameObjectAsync(location, cancellationToken, needCache);
+ return await m_ResourceManager.LoadGameObjectAsync(location, cancellationToken, needCache,
+ packageName: packageName);
}
///
@@ -617,10 +680,13 @@ namespace TEngine
/// 父节点位置。
/// 取消操作Token。
/// 是否需要缓存。
+ /// 指定资源包的名称。不传使用默认资源包
/// 异步游戏物体实例。
- public async UniTask LoadGameObjectAsync(string location, Transform parent, CancellationToken cancellationToken = default, bool needCache = false)
+ public async UniTask LoadGameObjectAsync(string location, Transform parent,
+ CancellationToken cancellationToken = default, bool needCache = false, string packageName = "")
{
- return await m_ResourceManager.LoadGameObjectAsync(location, parent, cancellationToken, needCache);
+ return await m_ResourceManager.LoadGameObjectAsync(location, parent, cancellationToken, needCache,
+ packageName: packageName);
}
///
@@ -628,10 +694,12 @@ namespace TEngine
///
/// 资源定位地址。
/// 取消操作Token。
+ /// 指定资源包的名称。不传使用默认资源包
/// 原生文件资源实例。
- public async UniTask LoadRawAssetAsync(string location, CancellationToken cancellationToken = default)
+ public async UniTask LoadRawAssetAsync(string location,
+ CancellationToken cancellationToken = default, string packageName = "")
{
- return await m_ResourceManager.LoadRawAssetAsync(location, cancellationToken);
+ return await m_ResourceManager.LoadRawAssetAsync(location, cancellationToken, packageName: packageName);
}
///
@@ -640,11 +708,14 @@ namespace TEngine
/// 资源定位地址。
/// 子资源名称。
/// 取消操作Token。
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源实例类型。
/// 原生文件资源实例。
- public async UniTask LoadSubAssetAsync(string location, string assetName, CancellationToken cancellationToken = default) where T : UnityEngine.Object
+ public async UniTask LoadSubAssetAsync(string location, string assetName,
+ CancellationToken cancellationToken = default, string packageName = "") where T : UnityEngine.Object
{
- return await m_ResourceManager.LoadSubAssetAsync(location, assetName, cancellationToken);
+ return await m_ResourceManager.LoadSubAssetAsync(location, assetName, cancellationToken,
+ packageName: packageName);
}
///
@@ -652,34 +723,41 @@ namespace TEngine
///
/// 资源定位地址。
/// 取消操作Token。
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源实例类型。
/// 原生文件资源实例。
- public async UniTask LoadAllSubAssetAsync(string location, CancellationToken cancellationToken = default) where T : UnityEngine.Object
+ public async UniTask LoadAllSubAssetAsync(string location,
+ CancellationToken cancellationToken = default, string packageName = "") where T : UnityEngine.Object
{
- return await m_ResourceManager.LoadAllSubAssetAsync(location, cancellationToken);
+ return await m_ResourceManager.LoadAllSubAssetAsync(location, cancellationToken,
+ packageName: packageName);
}
#region 预加载
+
///
/// 放入预加载对象。
///
/// 资源定位地址。
/// 预加载对象。
- public void PushPreLoadAsset(string location, UnityEngine.Object assetObject)
+ /// 指定资源包的名称。不传使用默认资源包
+ public void PushPreLoadAsset(string location, UnityEngine.Object assetObject, string packageName = "")
{
- m_ResourceManager.PushPreLoadAsset(location, assetObject);
+ m_ResourceManager.PushPreLoadAsset(location, assetObject, packageName: packageName);
}
///
/// 获取预加载的实例对象。
///
/// 资源定位地址。
+ /// 指定资源包的名称。不传使用默认资源包
/// 资源实例类型。
/// 预加载对象。
- public T GetPreLoadAsset(string location) where T : UnityEngine.Object
+ public T GetPreLoadAsset(string location, string packageName = "") where T : UnityEngine.Object
{
- return m_ResourceManager.GetPreLoadAsset(location);
+ return m_ResourceManager.GetPreLoadAsset(location, packageName: packageName);
}
+
#endregion
}
}
\ No newline at end of file