## 3-1.资源模块 - ResourceModule
资源模块运行模式有EditorSimulateMode、OfflinePlayMode以及HostPlayMode
编辑器模式下以顶部导航栏的选项卡为优先选项,打包后以Scene场景中ResourceModule脚本的Enum选项卡为优先选项(打包后不会走EditorSimulateMode)
Scene窗口Resource对象可以设置一些资源模块的常用设置,比如打包后的资源模式、资源校验等级以及自动卸载资源间隔等。

Menu窗口TEngineSetting可以设置一些资源模块的热更新设置,比如资源服务器地址以及在线参数等。备注在Luban目录下有一个基于Node的静态文件服务器,可以把在线参数以及AB放入用于做热更新测试。

常用接口
remark:资源模块初始化的生命周期已经在流程模块实现了,具体有需求可以自定义开发。
``` csharp
///
/// 获取当前资源包版本。
///
/// 资源包版本。
public string GetPackageVersion();
///
/// 异步更新最新包的版本。
///
/// 请求URL是否需要带时间戳。
/// 超时时间。
/// 请求远端包裹的最新版本操作句柄。
public UpdatePackageVersionOperation UpdatePackageVersionAsync(bool appendTimeTicks = false, int timeout = 60);
///
/// 向网络端请求并更新清单
///
/// 更新的包裹版本
/// 更新成功后自动保存版本号,作为下次初始化的版本。
/// 超时时间(默认值:60秒)
public UpdatePackageManifestOperation UpdatePackageManifestAsync(string packageVersion, bool autoSaveVersion = true, int timeout = 60);
///
/// 创建资源下载器,用于下载当前资源版本所有的资源包文件。
///
public ResourceDownloaderOperation CreateResourceDownloader();
///
/// 清理包裹未使用的缓存文件。
///
public ClearUnusedCacheFilesOperation ClearUnusedCacheFilesAsync();
///
/// 清理沙盒路径。
///
public void ClearSandbox();
///
/// 强制执行释放未被使用的资源。
///
/// 是否使用垃圾回收。
public void ForceUnloadUnusedAssets(bool performGCCollect);
///
/// 检查资源是否存在。
///
/// 要检查资源的名称。
/// 检查资源是否存在的结果。
public HasAssetResult HasAsset(string assetName);
/// 同步加载资源。
///
/// 要加载资源的名称。
/// 要加载资源的类型。
/// 资源实例。
T LoadAsset(string assetName) where T : Object;
///
/// 同步加载资源。
///
/// 要加载资源的名称。
/// 父节点位置。
/// 要加载资源的类型。
/// 资源实例。
T LoadAsset(string assetName, Transform parent) where T :Object;
///
/// 同步加载资源。
///
/// 资源操作句柄。
/// 要加载资源的名称。
/// 要加载资源的类型。
/// 资源实例。
T LoadAsset(string assetName,out AssetOperationHandle handle) where T : Object;
///
/// 同步加载资源。
///
/// 要加载资源的名称。
/// 资源操作句柄。
/// 父节点位置。
/// 要加载资源的类型。
/// 资源实例。
T LoadAsset(string assetName, Transform parent,out AssetOperationHandle handle) where T :Object;
///
/// 异步加载资源。
///
/// 要加载资源的名称。
/// 取消操作Token。
/// 要加载资源的类型。
/// 异步资源实例。
UniTask LoadAssetAsync(string assetName,CancellationToken cancellationToken) where T : Object;
///
/// 异步加载游戏物体。
///
/// 要加载的游戏物体名称。
/// 取消操作Token。
/// 异步游戏物体实例。
UniTask LoadGameObjectAsync(string assetName,CancellationToken cancellationToken);
///
/// 同步加载资源并获取句柄。
///
/// 要加载资源的名称。
/// 要加载资源的类型。
/// 同步加载资源句柄。
AssetOperationHandle LoadAssetGetOperation(string assetName) where T : Object;
///
/// 异步加载资源并获取句柄。
///
/// 要加载资源的名称。
/// 要加载资源的类型。
/// 异步加载资源句柄。
AssetOperationHandle LoadAssetAsyncHandle(string assetName) where T : Object;
///
/// 同步加载子资源对象
///
/// 资源类型
/// 资源的定位地址
public SubAssetsOperationHandle LoadSubAssetsSync(string location) where TObject : UnityEngine.Object;
///
/// 异步加载子资源对象
///
/// 资源类型
/// 资源的定位地址
public SubAssetsOperationHandle LoadSubAssetsAsync(string location) where TObject : UnityEngine.Object;
///
/// 同步加载子资源对象
///
/// 资源信息。
public SubAssetsOperationHandle LoadSubAssetsSync(AssetInfo assetInfo);
///
/// 异步加载场景。
///
/// 场景的定位地址
/// 场景加载模式
/// 加载完毕时是否主动激活
/// 优先级
/// 异步加载场景句柄。
SceneOperationHandle LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, bool activateOnLoad = true, int priority = 100);
///
/// 异步加载场景
///
/// 场景的资源信息
/// 场景加载模式
/// 加载完毕时是否主动激活
/// 优先级
/// 异步加载场景句柄。
SceneOperationHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, bool activateOnLoad = true, int priority = 100);
```