diff --git a/Assets/TEngine/Runtime/GameFramework/Resource/IResourceManager.cs b/Assets/TEngine/Runtime/GameFramework/Resource/IResourceManager.cs index 05684c22..cf11bcf3 100644 --- a/Assets/TEngine/Runtime/GameFramework/Resource/IResourceManager.cs +++ b/Assets/TEngine/Runtime/GameFramework/Resource/IResourceManager.cs @@ -186,23 +186,6 @@ namespace TEngine /// 要加载资源的类型。 /// 资源实例。 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); /// /// 同步加载资源并获取句柄。 @@ -221,21 +204,21 @@ namespace TEngine AssetOperationHandle LoadAssetAsyncHandle(string assetName) where T : Object; /// - /// 同步加载子资源对象 + /// 同步加载子资源对象。 /// - /// 资源类型 - /// 资源的定位地址 - public SubAssetsOperationHandle LoadSubAssetsSync(string location) where TObject : UnityEngine.Object; + /// 资源类型。 + /// 资源的定位地址。 + public SubAssetsOperationHandle LoadSubAssetsSync(string location) where TObject : Object; /// /// 异步加载子资源对象 /// - /// 资源类型 - /// 资源的定位地址 - public SubAssetsOperationHandle LoadSubAssetsAsync(string location) where TObject : UnityEngine.Object; + /// 资源类型。 + /// 资源的定位地址。 + public SubAssetsOperationHandle LoadSubAssetsAsync(string location) where TObject : Object; /// - /// 同步加载子资源对象 + /// 同步加载子资源对象。 /// /// 资源信息。 public SubAssetsOperationHandle LoadSubAssetsSync(AssetInfo assetInfo); @@ -251,7 +234,7 @@ namespace TEngine SceneOperationHandle LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, bool activateOnLoad = true, int priority = 100); /// - /// 异步加载场景 + /// 异步加载场景. /// /// 场景的资源信息 /// 场景加载模式 @@ -259,5 +242,69 @@ namespace TEngine /// 优先级 /// 异步加载场景句柄。 SceneOperationHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, bool activateOnLoad = true, int priority = 100); + + /// + /// 异步加载资源。 + /// + /// 资源定位地址。 + /// 取消操作Token。 + /// 要加载资源的类型。 + /// 异步资源实例。 + UniTask LoadAssetAsync(string location,CancellationToken cancellationToken) where T : Object; + + /// + /// 异步加载游戏物体。 + /// + /// 资源定位地址。 + /// 取消操作Token。 + /// 异步游戏物体实例。 + UniTask LoadGameObjectAsync(string location,CancellationToken cancellationToken); + + /// + /// 异步加载游戏物体。 + /// + /// 资源定位地址。 + /// 父节点位置。 + /// 取消操作Token。 + /// 异步游戏物体实例。 + UniTask LoadGameObjectAsync(string location,Transform parent,CancellationToken cancellationToken); + + /// + /// 异步加载原生文件。 + /// + /// 资源定位地址。 + /// 取消操作Token。 + /// 原生文件资源实例。 + UniTask LoadRawAssetAsync(string location,CancellationToken cancellationToken); + + /// + /// 异步加载子文件。 + /// + /// 资源定位地址。 + /// 资源名称。 + /// 取消操作Token。 + /// 资源实例类型。 + /// 原生文件资源实例。 + UniTask LoadSubAssetAsync(string location, string assetName, CancellationToken cancellationToken) where T : Object; + + /// + /// 异步加载所有子文件。 + /// + /// 资源定位地址。 + /// 取消操作Token。 + /// 资源实例类型。 + /// 原生文件资源实例。 + UniTask LoadAllSubAssetAsync(string location,CancellationToken cancellationToken) where T : Object; + + /// + /// 异步加载场景。 + /// + /// 场景的定位地址。 + /// 取消操作Token。 + /// 场景加载模式。 + /// 加载完毕时是否主动激活。 + /// 优先级。 + /// 场景资源实例。 + UniTask LoadSceneAsyncByUniTask(string location,CancellationToken cancellationToken,LoadSceneMode sceneMode = LoadSceneMode.Single, bool activateOnLoad = true, int priority = 100); } } \ No newline at end of file diff --git a/Assets/TEngine/Runtime/GameFramework/Resource/ResourceManager.cs b/Assets/TEngine/Runtime/GameFramework/Resource/ResourceManager.cs index ee91a909..fa4d4302 100644 --- a/Assets/TEngine/Runtime/GameFramework/Resource/ResourceManager.cs +++ b/Assets/TEngine/Runtime/GameFramework/Resource/ResourceManager.cs @@ -412,61 +412,6 @@ namespace TEngine } } - /// - /// 异步加载资源实例。 - /// - /// 要加载的实例名称。 - /// 取消操作Token。 - /// 资源实实例。 - public async UniTask LoadAssetAsync(string assetName, CancellationToken cancellationToken) where T : Object - { - AssetOperationHandle handle = LoadAssetAsyncHandle(assetName); - - bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken).SuppressCancellationThrow(); - - if (cancelOrFailed) - { - return null; - } - - if (typeof(T) == typeof(GameObject)) - { - GameObject ret = handle.InstantiateSync(); - - AssetReference.BindAssetReference(ret, handle, assetName); - - return ret as T; - } - else - { - return handle.AssetObject as T; - } - } - - /// - /// 异步加载游戏物体。 - /// - /// 要加载的游戏物体名称。 - /// 取消操作Token。 - /// 异步游戏物体实例。 - public async UniTask LoadGameObjectAsync(string assetName, CancellationToken cancellationToken) - { - AssetOperationHandle handle = LoadAssetAsyncHandle(assetName); - - bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken).SuppressCancellationThrow(); - - if (cancelOrFailed) - { - return null; - } - - GameObject ret = handle.InstantiateSync(); - - AssetReference.BindAssetReference(ret, handle, assetName); - - return ret; - } - /// /// 同步加载资源并获取句柄。 /// @@ -543,5 +488,163 @@ namespace TEngine { return YooAssets.LoadSceneAsync(assetInfo,sceneMode,activateOnLoad,priority); } + + + /// + /// 异步加载资源实例。 + /// + /// 要加载的实例名称。 + /// 取消操作Token。 + /// 资源实实例。 + public async UniTask LoadAssetAsync(string assetName, CancellationToken cancellationToken) where T : Object + { + AssetOperationHandle handle = LoadAssetAsyncHandle(assetName); + + bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken).SuppressCancellationThrow(); + + if (cancelOrFailed) + { + return null; + } + + if (typeof(T) == typeof(GameObject)) + { + GameObject ret = handle.InstantiateSync(); + + AssetReference.BindAssetReference(ret, handle, assetName); + + return ret as T; + } + else + { + return handle.AssetObject as T; + } + } + + /// + /// 异步加载游戏物体。 + /// + /// 要加载的游戏物体名称。 + /// 取消操作Token。 + /// 异步游戏物体实例。 + public async UniTask LoadGameObjectAsync(string assetName, CancellationToken cancellationToken) + { + AssetOperationHandle handle = LoadAssetAsyncHandle(assetName); + + bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken).SuppressCancellationThrow(); + + if (cancelOrFailed) + { + return null; + } + + GameObject ret = handle.InstantiateSync(); + + AssetReference.BindAssetReference(ret, handle, assetName); + + return ret; + } + + /// + /// 异步加载游戏物体。 + /// + /// 资源定位地址。 + /// 父节点位置。 + /// 取消操作Token。 + /// 异步游戏物体实例。 + public async UniTask LoadGameObjectAsync(string location, Transform parent, CancellationToken cancellationToken) + { + GameObject gameObject = await LoadGameObjectAsync(location,cancellationToken); + if (parent != null) + { + gameObject.transform.SetParent(parent); + } + else + { + Log.Error("Set Parent Failed"); + } + return gameObject; + } + + /// + /// 异步加载原生文件。 + /// + /// 资源定位地址。 + /// 取消操作Token。 + /// 原生文件资源实例操作句柄。 + public async UniTask LoadRawAssetAsync(string location, CancellationToken cancellationToken) + { + RawFileOperationHandle handle = YooAssets.LoadRawFileAsync(location); + + bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken).SuppressCancellationThrow(); + + return cancelOrFailed ? null : handle; + } + + /// + /// 异步加载子文件。 + /// + /// 资源定位地址。 + /// 资源名称。 + /// 取消操作Token。 + /// 资源实例类型。 + /// 原生文件资源实例。 + public async UniTask LoadSubAssetAsync(string location,string assetName, CancellationToken cancellationToken) where T : Object + { + var assetInfo = GetAssetInfo(location); + if (assetInfo == null) + { + Log.Fatal($"AssetsInfo is null"); + return null; + } + + SubAssetsOperationHandle handle = YooAssets.LoadSubAssetsAsync(assetInfo); + + bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken).SuppressCancellationThrow(); + + return cancelOrFailed ? null : handle.GetSubAssetObject(assetName); + } + + /// + /// 异步加载子文件。 + /// + /// 资源定位地址。 + /// 取消操作Token。 + /// 资源实例类型。 + /// 原生文件资源实例。 + public async UniTask LoadAllSubAssetAsync(string location,CancellationToken cancellationToken) where T : Object + { + var assetInfo = GetAssetInfo(location); + if (assetInfo == null) + { + Log.Fatal($"AssetsInfo is null"); + return null; + } + + SubAssetsOperationHandle handle = YooAssets.LoadSubAssetsAsync(assetInfo); + + bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken).SuppressCancellationThrow(); + + return cancelOrFailed ? null : handle.GetSubAssetObjects(); + } + + /// + /// 异步加载场景. + /// + /// 场景的定位地址. + /// 取消操作Token。 + /// 场景加载模式. + /// 加载完毕时是否主动激活. + /// 优先级. + /// 场景资源实例。 + public async UniTask LoadSceneAsyncByUniTask(string location,CancellationToken cancellationToken,LoadSceneMode sceneMode = LoadSceneMode.Single, + bool activateOnLoad = true, int priority = 100) + { + SceneOperationHandle handle = YooAssets.LoadSceneAsync(location,sceneMode,activateOnLoad,priority); + + bool cancelOrFailed = await handle.ToUniTask().AttachExternalCancellation(cancellationToken).SuppressCancellationThrow(); + + return cancelOrFailed ? default : handle.SceneObject; + } } } \ No newline at end of file