2025-01-23 19:06:48 +08:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Threading;
|
|
|
|
|
|
using AlicizaX.Runtime;
|
|
|
|
|
|
using Cysharp.Threading.Tasks;
|
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
using UnityEngine.SceneManagement;
|
|
|
|
|
|
using YooAsset;
|
|
|
|
|
|
|
|
|
|
|
|
namespace AlicizaX.Resource.Runtime
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 资源管理器接口。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public interface IResourceManager : IModule, IModuleUpdate
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取或设置运行模式。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
EPlayMode PlayMode { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 缓存系统启动时的验证级别。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
EFileVerifyLevel VerifyLevel { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 初始化接口。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
void Initialize();
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 初始化操作。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="packageName">资源包名称。</param>
|
2025-02-06 17:59:35 +08:00
|
|
|
|
UniTask<bool> InitPackageAsync(string packageName, string hostServerURL, string fallbackHostServerURL,string decryptionServicesName, bool isDefaultPackage = true);
|
2025-01-23 19:06:48 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 默认资源包名称。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
string DefaultPackageName { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取或设置异步系统参数,每帧执行消耗的最大时间切片(单位:毫秒)。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
long Milliseconds { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
Transform InstanceRoot { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取或设置资源对象池自动释放可释放对象的间隔秒数。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
float AssetAutoReleaseInterval { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取或设置资源对象池的容量。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
int AssetCapacity { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取或设置资源对象池对象过期秒数。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
float AssetExpireTime { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取或设置资源对象池的优先级。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
int AssetPriority { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 卸载资源。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="asset">要卸载的资源。</param>
|
|
|
|
|
|
void UnloadAsset(object asset);
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 资源回收(卸载引用计数为零的资源)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
void UnloadUnusedAssets(bool performGCCollect);
|
|
|
|
|
|
|
|
|
|
|
|
void ForceUnloadUnusedAssets(bool performGCCollect);
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 强制回收所有资源
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
void ForceUnloadAllAssets();
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 检查资源是否存在。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源定位地址。</param>
|
|
|
|
|
|
/// <param name="packageName">资源包名称。</param>
|
|
|
|
|
|
/// <returns>检查资源是否存在的结果。</returns>
|
|
|
|
|
|
public HasAssetResult HasAsset(string location, string packageName = "");
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 检查资源定位地址是否有效。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源的定位地址</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
bool CheckLocationValid(string location, string packageName = "");
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取资源信息列表。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="resTag">资源标签。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
/// <returns>资源信息列表。</returns>
|
|
|
|
|
|
AssetInfo[] GetAssetInfos(string resTag, string packageName = "");
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取资源信息列表。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="tags">资源标签列表。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
/// <returns>资源信息列表。</returns>
|
|
|
|
|
|
AssetInfo[] GetAssetInfos(string[] tags, string packageName = "");
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取资源信息。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源的定位地址。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
/// <returns>资源信息。</returns>
|
|
|
|
|
|
AssetInfo GetAssetInfo(string location, string packageName = "");
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 异步加载资源。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源的定位地址。</param>
|
|
|
|
|
|
/// <param name="priority">加载资源的优先级。</param>
|
|
|
|
|
|
/// <param name="loadAssetCallbacks">加载资源回调函数集。</param>
|
|
|
|
|
|
/// <param name="userData">用户自定义数据。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包。</param>
|
|
|
|
|
|
void LoadAssetAsync(string location, int priority, LoadAssetCallbacks loadAssetCallbacks, object userData, string packageName = "");
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 异步加载资源。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源的定位地址。</param>
|
|
|
|
|
|
/// <param name="assetType">要加载的资源类型。</param>
|
|
|
|
|
|
/// <param name="priority">加载资源的优先级。</param>
|
|
|
|
|
|
/// <param name="loadAssetCallbacks">加载资源回调函数集。</param>
|
|
|
|
|
|
/// <param name="userData">用户自定义数据。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包。</param>
|
|
|
|
|
|
void LoadAssetAsync(string location, Type assetType, int priority, LoadAssetCallbacks loadAssetCallbacks, object userData, string packageName = "");
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 同步加载资源。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源的定位地址。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
|
|
|
|
|
/// <returns>资源实例。</returns>
|
|
|
|
|
|
T LoadAsset<T>(string location, string packageName = "") where T : UnityEngine.Object;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 同步加载游戏物体并实例化。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源的定位地址。</param>
|
|
|
|
|
|
/// <param name="parent">资源实例父节点。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
/// <returns>资源实例。</returns>
|
|
|
|
|
|
/// <remarks>会实例化资源到场景,无需主动UnloadAsset,Destroy时自动UnloadAsset。</remarks>
|
|
|
|
|
|
GameObject LoadGameObject(string location, Transform parent = null, string packageName = "");
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 异步加载资源。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源的定位地址。</param>
|
|
|
|
|
|
/// <param name="callback">回调函数。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
|
|
|
|
|
UniTaskVoid LoadAsset<T>(string location, Action<T> callback, string packageName = "") where T : UnityEngine.Object;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 同步加载子资源对象。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <typeparam name="TObject">资源类型。</typeparam>
|
|
|
|
|
|
/// <param name="location">资源的定位地址。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
public TObject[] LoadSubAssetsSync<TObject>(string location, string packageName = "") where TObject : UnityEngine.Object;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 异步加载子资源对象。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <typeparam name="TObject">资源类型。</typeparam>
|
|
|
|
|
|
/// <param name="location">资源的定位地址。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
public UniTask<TObject[]> LoadSubAssetsAsync<TObject>(string location, string packageName = "") where TObject : UnityEngine.Object;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 异步加载资源。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源定位地址。</param>
|
|
|
|
|
|
/// <param name="cancellationToken">取消操作Token。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
/// <typeparam name="T">要加载资源的类型。</typeparam>
|
|
|
|
|
|
/// <returns>异步资源实例。</returns>
|
|
|
|
|
|
UniTask<T> LoadAssetAsync<T>(string location, CancellationToken cancellationToken = default, string packageName = "") where T : UnityEngine.Object;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 异步加载游戏物体并实例化。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="location">资源定位地址。</param>
|
|
|
|
|
|
/// <param name="parent">资源实例父节点。</param>
|
|
|
|
|
|
/// <param name="cancellationToken">取消操作Token。</param>
|
|
|
|
|
|
/// <param name="packageName">指定资源包的名称。不传使用默认资源包</param>
|
|
|
|
|
|
/// <returns>异步游戏物体实例。</returns>
|
|
|
|
|
|
/// <remarks>会实例化资源到场景,无需主动UnloadAsset,Destroy时自动UnloadAsset。</remarks>
|
|
|
|
|
|
UniTask<GameObject> LoadGameObjectAsync(string location, Transform parent = null, CancellationToken cancellationToken = default, string packageName = "");
|
|
|
|
|
|
|
|
|
|
|
|
AssetHandle LoadAssetGetOperation<T>(string location, string packageName = "") where T : UnityEngine.Object;
|
|
|
|
|
|
|
|
|
|
|
|
AssetHandle LoadAssetAsyncHandle<T>(string location, string packageName = "") where T : UnityEngine.Object;
|
|
|
|
|
|
|
|
|
|
|
|
#region 加载场景
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 异步加载场景
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="path">资源路径</param>
|
|
|
|
|
|
/// <param name="sceneMode">场景模式</param>
|
|
|
|
|
|
/// <param name="activateOnLoad">是否加载完成自动激活</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
UniTask<SceneHandle> LoadSceneAsync(string path, LoadSceneMode sceneMode, bool activateOnLoad = true);
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 异步加载场景
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="assetInfo">资源路径</param>
|
|
|
|
|
|
/// <param name="sceneMode">场景模式</param>
|
|
|
|
|
|
/// <param name="activateOnLoad">是否加载完成自动激活</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
UniTask<SceneHandle> LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode, bool activateOnLoad = true);
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
2025-01-24 16:21:00 +08:00
|
|
|
|
}
|