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; } } }