为Unity的button添加一个异步方法——OnClickAsync()

在使用异步编程模式下,如何为某个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;
}  

猜你喜欢

转载自blog.csdn.net/dzj2021/article/details/128673035