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