继续重构调整(UI)

- 引入 UniTask 和异步版本的 UIModule
- 调整 Runtime/UIBase 和 Presentation 下的脚本命名空间到 SepCore.UI
- 将原来的 5 层 UI 迁移到异步实现
- 规范各层的 UI 脚本命名
This commit is contained in:
SepComet
2026-06-03 09:58:37 +08:00
parent 6b8a6a8789
commit 7bba8bbb80
552 changed files with 83648 additions and 2726 deletions
@@ -0,0 +1,64 @@
using System;
using Cysharp.Threading.Tasks;
using GameFramework;
using GameFramework.Config;
using UnityGameFramework.Runtime;
namespace UnityGameFramework.Runtime.AsyncTask
{
/// <summary>
/// Config 异步扩展方法
/// </summary>
public static class ConfigAsyncExtension
{
/// <summary>
/// 异步加载配置
/// </summary>
/// <param name="configComponent">配置组件</param>
/// <param name="configAssetName">配置资源名称</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>加载成功事件</returns>
public static UniTask<LoadConfigSuccessEventArgs> LoadConfigAsync(this ConfigComponent configComponent,
string configAssetName,
object userData = null,
float timeout = 30f)
{
UniTask<LoadConfigSuccessEventArgs> waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync<LoadConfigSuccessEventArgs, LoadConfigFailureEventArgs>(
LoadConfigSuccessEventArgs.EventId,
LoadConfigFailureEventArgs.EventId,
successArgs => successArgs.ConfigAssetName == configAssetName && ReferenceEquals(successArgs.UserData, userData),
failureArgs => failureArgs.ConfigAssetName == configAssetName && ReferenceEquals(failureArgs.UserData, userData),
timeout
);
configComponent.ReadData(configAssetName, userData);
return waitTask;
}
/// <summary>
/// 异步加载配置(通过字典加载)
/// </summary>
/// <param name="configComponent">配置组件</param>
/// <param name="dictionaryName">字典名称</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>加载成功事件</returns>
public static UniTask<LoadConfigSuccessEventArgs> LoadConfigFromDictionaryAsync(this ConfigComponent configComponent,
string dictionaryName,
object userData = null,
float timeout = 30f)
{
UniTask<LoadConfigSuccessEventArgs> waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync<LoadConfigSuccessEventArgs, LoadConfigFailureEventArgs>(
LoadConfigSuccessEventArgs.EventId,
LoadConfigFailureEventArgs.EventId,
successArgs => successArgs.ConfigAssetName == dictionaryName && ReferenceEquals(successArgs.UserData, userData),
failureArgs => failureArgs.ConfigAssetName == dictionaryName && ReferenceEquals(failureArgs.UserData, userData),
timeout
);
configComponent.ReadData(dictionaryName, userData);
return waitTask;
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c268d17be2de9c242939823c820012e4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,64 @@
using System;
using Cysharp.Threading.Tasks;
using GameFramework;
using GameFramework.DataTable;
using SepCore.DataTable;
using UnityGameFramework.Runtime;
namespace UnityGameFramework.Runtime.AsyncTask
{
/// <summary>
/// DataTable 异步扩展方法
/// </summary>
public static class DataTableAsyncExtension
{
/// <summary>
/// 异步加载数据表
/// </summary>
/// <param name="dataTableComponent">数据表组件</param>
/// <param name="dataTableAssetName">数据表资源名称</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>加载成功事件</returns>
public static UniTask<LoadDataTableSuccessEventArgs> LoadDataTableAsync(this DataTableComponent dataTableComponent,
string dataTableAssetName,
object userData = null,
float timeout = 30f)
{
UniTask<LoadDataTableSuccessEventArgs> waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync<LoadDataTableSuccessEventArgs, LoadDataTableFailureEventArgs>(
LoadDataTableSuccessEventArgs.EventId,
LoadDataTableFailureEventArgs.EventId,
successArgs => successArgs.DataTableAssetName == dataTableAssetName && ReferenceEquals(successArgs.UserData, userData),
failureArgs => failureArgs.DataTableAssetName == dataTableAssetName && ReferenceEquals(failureArgs.UserData, userData),
timeout
);
string dataTableName = System.IO.Path.GetFileNameWithoutExtension(dataTableAssetName);
dataTableComponent.LoadDataTable(dataTableName, dataTableAssetName, userData);
return waitTask;
}
/// <summary>
/// 异步加载数据表(泛型版本)
/// </summary>
/// <typeparam name="T">数据行类型</typeparam>
/// <param name="dataTableComponent">数据表组件</param>
/// <param name="dataTableAssetName">数据表资源名称</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>加载的数据表</returns>
public static UniTask<IDataTable<T>> LoadDataTableAsync<T>(this DataTableComponent dataTableComponent,
string dataTableAssetName,
object userData = null,
float timeout = 30f) where T : IDataRow
{
return LoadDataTableAsync(dataTableComponent, dataTableAssetName, userData, timeout)
.ContinueWith(successArgs =>
{
// 获取数据表名称(去掉路径和扩展名)
string dataTableName = System.IO.Path.GetFileNameWithoutExtension(dataTableAssetName);
return dataTableComponent.GetDataTable<T>(dataTableName);
});
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: fd425f3318ddacb44a9c9468dcd434bf
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,58 @@
using System;
using Cysharp.Threading.Tasks;
using GameFramework;
using GameFramework.Download;
using UnityGameFramework.Runtime;
namespace UnityGameFramework.Runtime.AsyncTask
{
/// <summary>
/// Download 异步扩展方法
/// </summary>
public static class DownloadAsyncExtension
{
/// <summary>
/// 异步下载文件
/// </summary>
/// <param name="downloadComponent">下载组件</param>
/// <param name="downloadUri">下载地址</param>
/// <param name="downloadPath">下载后存放路径</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>下载成功事件</returns>
public static UniTask<DownloadSuccessEventArgs> DownloadFileAsync(this DownloadComponent downloadComponent,
string downloadUri,
string downloadPath,
object userData = null,
float timeout = 300f)
{
int serialId = 0;
UniTask<DownloadSuccessEventArgs> waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync<DownloadSuccessEventArgs, DownloadFailureEventArgs>(
DownloadSuccessEventArgs.EventId,
DownloadFailureEventArgs.EventId,
successArgs => successArgs.SerialId == serialId,
failureArgs => failureArgs.SerialId == serialId,
timeout
);
serialId = downloadComponent.AddDownload(downloadPath, downloadUri, userData);
return waitTask;
}
/// <summary>
/// 异步下载文件(简化版本)
/// </summary>
/// <param name="downloadComponent">下载组件</param>
/// <param name="downloadUri">下载地址</param>
/// <param name="downloadPath">下载后存放路径</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>下载成功事件</returns>
public static UniTask<DownloadSuccessEventArgs> DownloadFileAsync(this DownloadComponent downloadComponent,
string downloadUri,
string downloadPath,
float timeout = 300f)
{
return DownloadFileAsync(downloadComponent, downloadUri, downloadPath, null, timeout);
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: cfc5e4ff432a8564a99f65529449b370
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,114 @@
using System;
using Cysharp.Threading.Tasks;
using GameFramework;
using GameFramework.Entity;
using UnityGameFramework.Runtime;
namespace UnityGameFramework.Runtime.AsyncTask
{
/// <summary>
/// Entity 异步扩展方法
/// </summary>
public static class EntityAsyncExtension
{
/// <summary>
/// 异步显示实体
/// </summary>
/// <param name="entityComponent">实体组件</param>
/// <param name="entityId">实体编号</param>
/// <param name="entityLogicType">实体逻辑类型</param>
/// <param name="entityAssetName">实体资源名称</param>
/// <param name="entityGroupName">实体组名称</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>显示的实体</returns>
public static UniTask<Entity> ShowEntityAsync(this EntityComponent entityComponent,
int entityId,
Type entityLogicType,
string entityAssetName,
string entityGroupName,
object userData = null,
float timeout = 30f)
{
UniTask<Entity> waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync<ShowEntitySuccessEventArgs, ShowEntityFailureEventArgs>(
ShowEntitySuccessEventArgs.EventId,
ShowEntityFailureEventArgs.EventId,
successArgs => successArgs.Entity.Id == entityId && ReferenceEquals(successArgs.UserData, userData),
failureArgs => failureArgs.EntityId == entityId && ReferenceEquals(failureArgs.UserData, userData),
timeout
).ContinueWith(successArgs => successArgs.Entity);
entityComponent.ShowEntity(entityId, entityLogicType, entityAssetName, entityGroupName, userData);
return waitTask;
}
/// <summary>
/// 异步显示实体(泛型版本)
/// </summary>
/// <typeparam name="T">实体逻辑类型</typeparam>
/// <param name="entityComponent">实体组件</param>
/// <param name="entityId">实体编号</param>
/// <param name="entityAssetName">实体资源名称</param>
/// <param name="entityGroupName">实体组名称</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>显示的实体</returns>
public static UniTask<T> ShowEntityAsync<T>(this EntityComponent entityComponent,
int entityId,
string entityAssetName,
string entityGroupName,
object userData = null,
float timeout = 30f) where T : EntityLogic
{
UniTask<T> waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync<ShowEntitySuccessEventArgs, ShowEntityFailureEventArgs>(
ShowEntitySuccessEventArgs.EventId,
ShowEntityFailureEventArgs.EventId,
successArgs => successArgs.Entity.Id == entityId && ReferenceEquals(successArgs.UserData, userData),
failureArgs => failureArgs.EntityId == entityId && ReferenceEquals(failureArgs.UserData, userData),
timeout
).ContinueWith(successArgs => (T)successArgs.Entity.Logic);
entityComponent.ShowEntity<T>(entityId, entityAssetName, entityGroupName, userData);
return waitTask;
}
/// <summary>
/// 异步隐藏实体
/// </summary>
/// <param name="entityComponent">实体组件</param>
/// <param name="entityId">实体编号</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>隐藏完成事件</returns>
public static UniTask<HideEntityCompleteEventArgs> HideEntityAsync(this EntityComponent entityComponent,
int entityId,
object userData = null,
float timeout = 30f)
{
UniTask<HideEntityCompleteEventArgs> waitTask = AsyncTaskHelper.WaitEventAsync<HideEntityCompleteEventArgs>(
HideEntityCompleteEventArgs.EventId,
args => args.EntityId == entityId,
timeout
);
entityComponent.HideEntity(entityId, userData);
return waitTask;
}
/// <summary>
/// 异步隐藏实体(通过实体对象)
/// </summary>
/// <param name="entityComponent">实体组件</param>
/// <param name="entity">要隐藏的实体</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>隐藏完成事件</returns>
public static UniTask<HideEntityCompleteEventArgs> HideEntityAsync(this EntityComponent entityComponent,
Entity entity,
object userData = null,
float timeout = 30f)
{
return HideEntityAsync(entityComponent, entity.Id, userData, timeout);
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0049c1a3ff0446246b18d6b2ab0f29c6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,39 @@
using System;
using Cysharp.Threading.Tasks;
using GameFramework;
using GameFramework.Localization;
using UnityGameFramework.Runtime;
namespace UnityGameFramework.Runtime.AsyncTask
{
/// <summary>
/// Localization 异步扩展方法
/// </summary>
public static class LocalizationAsyncExtension
{
/// <summary>
/// 异步加载字典
/// </summary>
/// <param name="localizationComponent">本地化组件</param>
/// <param name="dictionaryAssetName">字典资源名称</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>加载成功事件</returns>
public static UniTask<LoadDictionarySuccessEventArgs> LoadDictionaryAsync(this LocalizationComponent localizationComponent,
string dictionaryAssetName,
object userData = null,
float timeout = 30f)
{
UniTask<LoadDictionarySuccessEventArgs> waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync<LoadDictionarySuccessEventArgs, LoadDictionaryFailureEventArgs>(
LoadDictionarySuccessEventArgs.EventId,
LoadDictionaryFailureEventArgs.EventId,
successArgs => successArgs.DictionaryAssetName == dictionaryAssetName && ReferenceEquals(successArgs.UserData, userData),
failureArgs => failureArgs.DictionaryAssetName == dictionaryAssetName && ReferenceEquals(failureArgs.UserData, userData),
timeout
);
localizationComponent.ReadData(dictionaryAssetName, userData);
return waitTask;
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 2d8cd831d31f1e746bbc65c5591dc930
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,76 @@
using System;
using Cysharp.Threading.Tasks;
using GameFramework;
using GameFramework.Network;
using UnityGameFramework.Runtime;
namespace UnityGameFramework.Runtime.AsyncTask
{
/// <summary>
/// Network 异步扩展方法
/// </summary>
public static class NetworkAsyncExtension
{
/// <summary>
/// 异步连接网络
/// </summary>
/// <param name="networkComponent">网络组件</param>
/// <param name="networkChannelName">网络频道名称</param>
/// <param name="address">连接地址</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>连接成功事件</returns>
public static UniTask<NetworkConnectedEventArgs> ConnectAsync(this NetworkComponent networkComponent,
string networkChannelName,
string address,
object userData = null,
float timeout = 30f)
{
return AsyncTaskHelper.WaitEventAsync<NetworkConnectedEventArgs>(
NetworkConnectedEventArgs.EventId,
args => args.NetworkChannel.Name == networkChannelName,
timeout
);
}
/// <summary>
/// 异步连接网络(带端口)
/// </summary>
/// <param name="networkComponent">网络组件</param>
/// <param name="networkChannelName">网络频道名称</param>
/// <param name="address">连接地址</param>
/// <param name="port">端口号</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>连接成功事件</returns>
public static UniTask<NetworkConnectedEventArgs> ConnectAsync(this NetworkComponent networkComponent,
string networkChannelName,
string address,
int port,
object userData = null,
float timeout = 30f)
{
return ConnectAsync(networkComponent, networkChannelName, $"{address}:{port}", userData, timeout);
}
/// <summary>
/// 异步断开网络连接
/// </summary>
/// <param name="networkComponent">网络组件</param>
/// <param name="networkChannelName">网络频道名称</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>关闭事件</returns>
public static UniTask<NetworkClosedEventArgs> DisconnectAsync(this NetworkComponent networkComponent,
string networkChannelName,
object userData = null,
float timeout = 30f)
{
return AsyncTaskHelper.WaitEventAsync<NetworkClosedEventArgs>(
NetworkClosedEventArgs.EventId,
args => args.NetworkChannel.Name == networkChannelName,
timeout
);
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: cc307b69189670d499c75d8c4cb5553a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,62 @@
using System;
using Cysharp.Threading.Tasks;
using GameFramework;
using GameFramework.Resource;
using UnityGameFramework.Runtime;
namespace UnityGameFramework.Runtime.AsyncTask
{
/// <summary>
/// Resource 异步扩展方法
/// </summary>
public static class ResourceAsyncExtension
{
/// <summary>
/// 异步等待资源更新完成
/// </summary>
/// <param name="resourceComponent">资源组件</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>更新完成事件</returns>
public static UniTask<ResourceUpdateAllCompleteEventArgs> WaitForResourceUpdateCompleteAsync(this ResourceComponent resourceComponent,
float timeout = 0f)
{
return AsyncTaskHelper.WaitEventAsync<ResourceUpdateAllCompleteEventArgs>(
ResourceUpdateAllCompleteEventArgs.EventId,
null,
timeout
);
}
/// <summary>
/// 异步等待资源验证完成
/// </summary>
/// <param name="resourceComponent">资源组件</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>验证成功事件</returns>
public static UniTask<ResourceVerifySuccessEventArgs> WaitForResourceVerifyCompleteAsync(this ResourceComponent resourceComponent,
float timeout = 0f)
{
return AsyncTaskHelper.WaitEventAsync<ResourceVerifySuccessEventArgs>(
ResourceVerifySuccessEventArgs.EventId,
null,
timeout
);
}
/// <summary>
/// 异步等待资源应用完成
/// </summary>
/// <param name="resourceComponent">资源组件</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>应用成功事件</returns>
public static UniTask<ResourceApplySuccessEventArgs> WaitForResourceApplyCompleteAsync(this ResourceComponent resourceComponent,
float timeout = 0f)
{
return AsyncTaskHelper.WaitEventAsync<ResourceApplySuccessEventArgs>(
ResourceApplySuccessEventArgs.EventId,
null,
timeout
);
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e1e5440eb71427c42a16164ab6a664e2
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,64 @@
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;
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b140d86ecd745fd48b99bdc70b28b6e1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,45 @@
using System;
using Cysharp.Threading.Tasks;
using GameFramework;
using GameFramework.Sound;
using UnityGameFramework.Runtime;
namespace UnityGameFramework.Runtime.AsyncTask
{
/// <summary>
/// Sound 异步扩展方法
/// </summary>
public static class SoundAsyncExtension
{
/// <summary>
/// 异步播放声音
/// </summary>
/// <param name="soundComponent">声音组件</param>
/// <param name="soundAssetName">声音资源名称</param>
/// <param name="soundGroupName">声音组名称</param>
/// <param name="playSoundParams">播放声音参数</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>播放成功事件</returns>
public static UniTask<PlaySoundSuccessEventArgs> PlaySoundAsync(this SoundComponent soundComponent,
string soundAssetName,
string soundGroupName,
PlaySoundParams playSoundParams = null,
object userData = null,
float timeout = 30f)
{
int serialId = 0;
UniTask<PlaySoundSuccessEventArgs> waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync<PlaySoundSuccessEventArgs, PlaySoundFailureEventArgs>(
PlaySoundSuccessEventArgs.EventId,
PlaySoundFailureEventArgs.EventId,
successArgs => successArgs.SerialId == serialId,
failureArgs => failureArgs.SerialId == serialId,
timeout
);
serialId = soundComponent.PlaySound(soundAssetName, soundGroupName, 0, playSoundParams, userData);
return waitTask;
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: cfb0decbe226b9d4895ed53603d37c29
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,124 @@
using Cysharp.Threading.Tasks;
using SepCore.Definition;
using SepCore.UI;
using UnityGameFramework.Runtime;
namespace UnityGameFramework.Runtime.AsyncTask
{
/// <summary>
/// UI 异步扩展方法
/// </summary>
public static class UIAsyncExtension
{
/// <summary>
/// 等待界面打开完成
/// </summary>
/// <param name="uiComponent">UI组件</param>
/// <param name="serialId">界面序列编号</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>打开的界面</returns>
public static UniTask<UIForm> WaitOpenUIFormAsync(this UIComponent uiComponent,
int serialId,
float timeout = 30f)
{
return AsyncTaskHelper.WaitSuccessOrFailureAsync<OpenUIFormSuccessEventArgs, OpenUIFormFailureEventArgs>(
OpenUIFormSuccessEventArgs.EventId,
OpenUIFormFailureEventArgs.EventId,
successArgs => successArgs.UIForm.SerialId == serialId,
failureArgs => failureArgs.SerialId == serialId,
timeout
).ContinueWith(successArgs => successArgs.UIForm);
}
/// <summary>
/// 异步打开界面
/// </summary>
/// <param name="uiComponent">UI组件</param>
/// <param name="uiFormAssetName">界面资源名称</param>
/// <param name="uiGroupName">界面组名称</param>
/// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>打开的界面</returns>
public static UniTask<UIForm> OpenUIFormAsync(this UIComponent uiComponent,
string uiFormAssetName,
string uiGroupName,
bool pauseCoveredUIForm = true,
object userData = null,
float timeout = 30f)
{
int serialId = 0;
UniTask<UIForm> waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync<OpenUIFormSuccessEventArgs, OpenUIFormFailureEventArgs>(
OpenUIFormSuccessEventArgs.EventId,
OpenUIFormFailureEventArgs.EventId,
successArgs => successArgs.UIForm.SerialId == serialId,
failureArgs => failureArgs.SerialId == serialId,
timeout
).ContinueWith(successArgs => successArgs.UIForm);
serialId = uiComponent.OpenUIForm(uiFormAssetName, uiGroupName, pauseCoveredUIForm, userData);
return waitTask;
}
/// <summary>
/// 异步打开界面(通过界面编号)
/// </summary>
/// <param name="uiComponent">UI组件</param>
/// <param name="uiType">界面类型</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>打开的界面</returns>
public static UniTask<UIForm> OpenUIFormAsync(this UIComponent uiComponent,
UIFormType uiType,
object userData = null,
float timeout = 30f)
{
int? serialId = uiComponent.OpenUIForm(uiType, userData);
if (!serialId.HasValue)
{
return UniTask.FromResult<UIForm>(null);
}
return uiComponent.WaitOpenUIFormAsync(serialId.Value, timeout);
}
/// <summary>
/// 异步关闭界面
/// </summary>
/// <param name="uiComponent">UI组件</param>
/// <param name="serialId">界面序列编号</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>关闭完成事件</returns>
public static UniTask<CloseUIFormCompleteEventArgs> CloseUIFormAsync(this UIComponent uiComponent,
int serialId,
object userData = null,
float timeout = 30f)
{
UniTask<CloseUIFormCompleteEventArgs> waitTask = AsyncTaskHelper.WaitEventAsync<CloseUIFormCompleteEventArgs>(
CloseUIFormCompleteEventArgs.EventId,
args => args.SerialId == serialId,
timeout
);
uiComponent.CloseUIForm(serialId, userData);
return waitTask;
}
/// <summary>
/// 异步关闭界面(通过界面对象)
/// </summary>
/// <param name="uiComponent">UI组件</param>
/// <param name="uiForm">要关闭的界面</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>关闭完成事件</returns>
public static UniTask<CloseUIFormCompleteEventArgs> CloseUIFormAsync(this UIComponent uiComponent,
UIForm uiForm,
object userData = null,
float timeout = 30f)
{
return CloseUIFormAsync(uiComponent, uiForm.SerialId, userData, timeout);
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9ceba48ef9e814a40a88f96bf1fbf14c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,102 @@
using System;
using Cysharp.Threading.Tasks;
using GameFramework;
using GameFramework.WebRequest;
using UnityGameFramework.Runtime;
namespace UnityGameFramework.Runtime.AsyncTask
{
/// <summary>
/// WebRequest 异步扩展方法
/// </summary>
public static class WebRequestAsyncExtension
{
/// <summary>
/// 异步发送Web请求
/// </summary>
/// <param name="webRequestComponent">WebRequest组件</param>
/// <param name="webRequestUri">请求地址</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>请求成功事件</returns>
public static UniTask<WebRequestSuccessEventArgs> GetWebRequestAsync(this WebRequestComponent webRequestComponent,
string webRequestUri,
object userData = null,
float timeout = 30f)
{
int serialId = 0;
UniTask<WebRequestSuccessEventArgs> waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync<WebRequestSuccessEventArgs, WebRequestFailureEventArgs>(
WebRequestSuccessEventArgs.EventId,
WebRequestFailureEventArgs.EventId,
successArgs => successArgs.SerialId == serialId,
failureArgs => failureArgs.SerialId == serialId,
timeout
);
serialId = webRequestComponent.AddWebRequest(webRequestUri, userData);
return waitTask;
}
/// <summary>
/// 异步发送Web请求并获取字节数据
/// </summary>
/// <param name="webRequestComponent">WebRequest组件</param>
/// <param name="webRequestUri">请求地址</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>响应字节数据</returns>
public static UniTask<byte[]> GetWebRequestBytesAsync(this WebRequestComponent webRequestComponent,
string webRequestUri,
object userData = null,
float timeout = 30f)
{
return GetWebRequestAsync(webRequestComponent, webRequestUri, userData, timeout)
.ContinueWith(successArgs => successArgs.GetWebResponseBytes());
}
/// <summary>
/// 异步发送Web请求并获取字符串数据
/// </summary>
/// <param name="webRequestComponent">WebRequest组件</param>
/// <param name="webRequestUri">请求地址</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>响应字符串数据</returns>
public static UniTask<string> GetWebRequestStringAsync(this WebRequestComponent webRequestComponent,
string webRequestUri,
object userData = null,
float timeout = 30f)
{
return GetWebRequestBytesAsync(webRequestComponent, webRequestUri, userData, timeout)
.ContinueWith(bytes => System.Text.Encoding.UTF8.GetString(bytes));
}
/// <summary>
/// 异步发送POST请求
/// </summary>
/// <param name="webRequestComponent">WebRequest组件</param>
/// <param name="webRequestUri">请求地址</param>
/// <param name="postData">POST数据</param>
/// <param name="userData">用户自定义数据</param>
/// <param name="timeout">超时时间(秒),0表示不超时</param>
/// <returns>请求成功事件</returns>
public static UniTask<WebRequestSuccessEventArgs> PostWebRequestAsync(this WebRequestComponent webRequestComponent,
string webRequestUri,
byte[] postData,
object userData = null,
float timeout = 30f)
{
int serialId = 0;
UniTask<WebRequestSuccessEventArgs> waitTask = AsyncTaskHelper.WaitSuccessOrFailureAsync<WebRequestSuccessEventArgs, WebRequestFailureEventArgs>(
WebRequestSuccessEventArgs.EventId,
WebRequestFailureEventArgs.EventId,
successArgs => successArgs.SerialId == serialId,
failureArgs => failureArgs.SerialId == serialId,
timeout
);
serialId = webRequestComponent.AddWebRequest(webRequestUri, postData, userData);
return waitTask;
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 579cf8ed8a820d34d9e7e46f60a3f176
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: