2025-04-21 21:14:23 +08:00

337 lines
14 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Threading;
using Cysharp.Threading.Tasks;
using UnityEngine;
using YooAsset;
namespace TEngine
{
/// <summary>
/// 资源管理器接口。
/// </summary>
public interface IResourceModule
{
/// <summary>
/// 获取当前资源适用的游戏版本号。
/// </summary>
string ApplicableGameVersion { get; }
/// <summary>
/// 获取当前内部资源版本号。
/// </summary>
int InternalResourceVersion { get; }
/// <summary>
/// 获取或设置运行模式。
/// </summary>
EPlayMode PlayMode { get; set; }
/// <summary>
/// 资源加密方式。
/// </summary>
EncryptionType EncryptionType { get; set; }
/// <summary>
/// 是否边玩边下载。
/// </summary>
bool UpdatableWhilePlaying { get; set; }
/// <summary>
/// 同时下载的最大数目。
/// </summary>
int DownloadingMaxNum { get; set; }
/// <summary>
/// 失败重试最大数目。
/// </summary>
int FailedTryAgain { get; set; }
/// <summary>
/// 初始化接口。
/// </summary>
void Initialize();
/// <summary>
/// 初始化操作。
/// </summary>
/// <param name="customPackageName">资源包名称。</param>
UniTask<InitializationOperation> InitPackage(string customPackageName);
/// <summary>
/// 默认资源包名称。
/// </summary>
string DefaultPackageName { get; set; }
/// <summary>
/// 获取或设置异步系统参数,每帧执行消耗的最大时间切片(单位:毫秒)。
/// </summary>
long Milliseconds { get; set; }
/// <summary>
/// 热更链接URL。
/// </summary>
string HostServerURL { get; set; }
/// <summary>
/// 备用热更URL。
/// </summary>
string FallbackHostServerURL { 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();
/// <summary>
/// 强制回收所有资源
/// </summary>
void ForceUnloadAllAssets();
/// <summary>
/// 强制执行释放未被使用的资源。
/// </summary>
/// <param name="performGCCollect">是否使用垃圾回收。</param>
void ForceUnloadUnusedAssets(bool performGCCollect);
/// <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>会实例化资源到场景无需主动UnloadAssetDestroy时自动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>会实例化资源到场景无需主动UnloadAssetDestroy时自动UnloadAsset。</remarks>
UniTask<GameObject> LoadGameObjectAsync(string location, Transform parent = null, CancellationToken cancellationToken = default, string packageName = "");
/// <summary>
/// 获取同步加载的资源操作句柄。
/// </summary>
/// <param name="location">资源定位地址。</param>
/// <param name="packageName">资源包名称。</param>
/// <typeparam name="T">资源类型。</typeparam>
/// <returns>资源操作句柄。</returns>
AssetHandle LoadAssetSyncHandle<T>(string location, string packageName = "") where T : UnityEngine.Object;
/// <summary>
/// 获取异步加载的资源操作句柄。
/// </summary>
/// <param name="location">资源定位地址。</param>
/// <param name="packageName">资源包名称。</param>
/// <typeparam name="T">资源类型。</typeparam>
/// <returns>资源操作句柄。</returns>
AssetHandle LoadAssetAsyncHandle<T>(string location, string packageName = "") where T : UnityEngine.Object;
/// <summary>
/// 清理包裹未使用的缓存文件。
/// </summary>
/// <param name="clearMode">文件清理方式。</param>
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
ClearCacheFilesOperation ClearCacheFilesAsync(
EFileClearMode clearMode = EFileClearMode.ClearUnusedBundleFiles, string customPackageName = "");
/// <summary>
/// 清理沙盒路径。
/// </summary>
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
void ClearAllBundleFiles(string customPackageName = "");
/// <summary>
/// 资源下载器,用于下载当前资源版本所有的资源包文件。
/// </summary>
ResourceDownloaderOperation Downloader { get; set; }
/// <summary>
/// 创建资源下载器,用于下载当前资源版本所有的资源包文件。
/// </summary>
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
ResourceDownloaderOperation CreateResourceDownloader(string customPackageName = "");
/// <summary>
/// 当前最新的包裹版本。
/// </summary>
string PackageVersion { set; get; }
/// <summary>
/// 获取当前资源包版本。
/// </summary>
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
/// <returns>资源包版本。</returns>
string GetPackageVersion(string customPackageName = "");
/// <summary>
/// 异步更新最新包的版本。
/// </summary>
/// <param name="appendTimeTicks">请求URL是否需要带时间戳。</param>
/// <param name="timeout">超时时间。</param>
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
/// <returns>请求远端包裹的最新版本操作句柄。</returns>
RequestPackageVersionOperation RequestPackageVersionAsync(bool appendTimeTicks = false, int timeout = 60, string customPackageName = "");
/// <summary>
/// 向网络端请求并更新清单
/// </summary>
/// <param name="packageVersion">更新的包裹版本</param>
/// <param name="timeout">超时时间默认值60秒</param>
/// <param name="customPackageName">指定资源包的名称。不传使用默认资源包</param>
UpdatePackageManifestOperation UpdatePackageManifestAsync(string packageVersion, int timeout = 60, string customPackageName = "");
/// <summary>
/// 设置远程服务Url。
/// </summary>
/// <param name="defaultHostServer">默认远端资源地址。</param>
/// <param name="fallbackHostServer">备用远端资源地址。</param>
void SetRemoteServicesUrl(string defaultHostServer, string fallbackHostServer);
/// <summary>
/// 低内存行为。
/// </summary>
void OnLowMemory();
/// <summary>
/// 低内存回调保护。
/// </summary>
/// <param name="action">低内存行为。</param>
void SetForceUnloadUnusedAssetsAction(Action<bool> action);
}
}