在使用异步编程模式下,如何为某个component添加一个异步方法?
举例:为一个Button添加一个Click的异步等待方法
实现的步骤:
- 1、使用扩展方法
- 2、定义一个委托Action
- 3、把Action绑到Button的onClick上
- 4、循环等待onClick事件
- 5、等到后解除Action的绑定
此处只做举例用,更为完善的写法,应该加入取消等待…
/// <summary>
/// 为Button定制一个扩展方法:点击事件的异步等待
/// </summary>
/// <param name="button">按钮Button</param>
/// <param name="delayMs">循环等待中delay的时间-毫秒</param>
/// <returns>Task</returns>
public static async Task OnClickAsync(this Button button,int delayMs = 50)
{
bool clicked = false;
UnityAction ClickAction = () =>
{
clicked = true;
Debug.Log($"ClickAction() was called {Time.realtimeSinceStartup}");
};
//Debug.Log("添加侦听");
button.onClick.AddListener(ClickAction);
while (!clicked)
{
await Task.Delay(delayMs); //等待时间【ms毫秒】
}
//Debug.Log("移除侦听");
button.onClick.RemoveListener(ClickAction);
ClickAction = null;
}