vampire-like/Assets/GameMain/Scripts/Runtime/BuiltinComponent/AsyncTask/SceneAsyncExtension.cs

65 lines
2.8 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 Cysharp.Threading.Tasks;
using GameFramework;
using GameFramework.Scene;
using UnityGameFramework.Runtime;
namespace UnityGameFramework.Runtime.AsyncTask
{
/// <summary>
/// Scene 异步扩展方法
/// </summary>
public static class SceneAsyncExtension
{
/// <summary>
/// 异步加载场景
/// </summary>
/// <param name="sceneComponent">场景组件</param>
/// <param name="sceneAssetName">场景资源名称</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间0表示不超时</param>
/// <returns>加载成功事件</returns>
public static UniTask<LoadSceneSuccessEventArgs> LoadSceneAsync(this SceneComponent sceneComponent,
string sceneAssetName,
object userData = null,
float timeout = 60f)
{
UniTask<LoadSceneSuccessEventArgs> waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync<LoadSceneSuccessEventArgs, LoadSceneFailureEventArgs>(
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;
}
/// <summary>
/// 异步卸载场景
/// </summary>
/// <param name="sceneComponent">场景组件</param>
/// <param name="sceneAssetName">场景资源名称</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间0表示不超时</param>
/// <returns>卸载成功事件</returns>
public static UniTask<UnloadSceneSuccessEventArgs> UnloadSceneAsync(this SceneComponent sceneComponent,
string sceneAssetName,
object userData = null,
float timeout = 60f)
{
UniTask<UnloadSceneSuccessEventArgs> waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync<UnloadSceneSuccessEventArgs, UnloadSceneFailureEventArgs>(
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;
}
}
}