using Cysharp.Threading.Tasks;
using UnityGameFramework.Runtime;
using LoadSceneFailureEventArgs = UnityGameFramework.Runtime.LoadSceneFailureEventArgs;
using LoadSceneSuccessEventArgs = UnityGameFramework.Runtime.LoadSceneSuccessEventArgs;
using UnloadSceneFailureEventArgs = UnityGameFramework.Runtime.UnloadSceneFailureEventArgs;
using UnloadSceneSuccessEventArgs = UnityGameFramework.Runtime.UnloadSceneSuccessEventArgs;
namespace SepCore.AsyncTask
{
///
/// Scene 异步扩展方法
///
public static class SceneAsyncExtension
{
///
/// 异步加载场景
///
/// 场景组件
/// 场景资源名称
/// 用户自定义数据
/// 超时时间(秒),0表示不超时
/// 加载成功事件
public static UniTask LoadSceneAsync(this SceneComponent sceneComponent,
string sceneAssetName,
object userData = null,
float timeout = 60f)
{
UniTask waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync(
LoadSceneSuccessEventArgs.EventId,
LoadSceneFailureEventArgs.EventId,
successArgs => successArgs.SceneAssetName == sceneAssetName && ReferenceEquals(successArgs.UserData, userData),
failureArgs => failureArgs.SceneAssetName == sceneAssetName && ReferenceEquals(failureArgs.UserData, userData),
timeout
);
sceneComponent.LoadScene(sceneAssetName, userData);
return waitTask;
}
///
/// 异步卸载场景
///
/// 场景组件
/// 场景资源名称
/// 用户自定义数据
/// 超时时间(秒),0表示不超时
/// 卸载成功事件
public static UniTask UnloadSceneAsync(this SceneComponent sceneComponent,
string sceneAssetName,
object userData = null,
float timeout = 60f)
{
UniTask waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync(
UnloadSceneSuccessEventArgs.EventId,
UnloadSceneFailureEventArgs.EventId,
successArgs => successArgs.SceneAssetName == sceneAssetName && ReferenceEquals(successArgs.UserData, userData),
failureArgs => failureArgs.SceneAssetName == sceneAssetName && ReferenceEquals(failureArgs.UserData, userData),
timeout
);
sceneComponent.UnloadScene(sceneAssetName, userData);
return waitTask;
}
}
}