简单的事件回调器

一个简单的事件回调管理器。

  1. 用来简单的解决多线程无法调用Unity主线程API 的问题。

  1. 用来处理延时回调。

  1. 用来处理自定义时长循环回调。


首先是 TimeActionUpdate 类,用来存储事件。

public class TimeActionUpdate
{
    public float timeCounter;
    public Action updateAction;
    public Action endAction;
    public bool isTrigered = false;

    public TimeActionUpdate(Action updateAction = null, Action endAction = null)
    {
        this.updateAction = updateAction;
        this.endAction = endAction;
    }
    public TimeActionUpdate() { }

    public void Update(float dt)
    {
        if (isTrigered)
        {
            if (timeCounter > 0)
            {
                timeCounter -= dt;
                updateAction?.Invoke();
            }
            else
            {
                isTrigered = false;
                endAction?.Invoke();
            }
        }
    }

    public void Trigger(float invokeTime = 0.05f)
    {
        timeCounter = invokeTime;
        isTrigered = true;
    }
}

使用时:

public class Demo : MonoBehaviour
{
    Dictionary<string, TimeActionUpdate> allActions = new Dictionary<string, TimeActionUpdate>();
    private const string invokeCallback = "invokeCallback";
    private const string updateCallback = "updateCallback";



    //注册回调
    private void Start()
    {
        allActions[invokeCallback] = new TimeActionUpdate(null, Func_InvokeCallback);
        allActions[updateCallback] = new TimeActionUpdate(null, Func_UpdateCallback);
    }

    //在Update中更新回调
    private void Update()
    {
        foreach (var item in allActions)
        {
            item.Value.Update(Time.deltaTime);
        }
    }

    //回调方法类型1
    private void Func_InvokeCallback()
    {
        Debug.Log("延时回调被调用");
    }
    //回调方法类型2
    private void Func_UpdateCallback()
    {
        Debug.Log("循环回调被调用");
    }


    //触发回调 1 供其他方法调用 可以绑定在Button上等
    public void Trigger_InvokeCallBack()
    {
        allActions[invokeCallback].Trigger(2); //在 2 秒后 将执行 回调方法 Func_InvokeCallback() 
    }

    //触发回调 2 供其他方法调用 可以绑定在Button上等
    public void Trigger_UpdateCallBack()
    {
        allActions[updateCallback].Trigger(2); // 立即开始执行  Func_UpdateCallback() 回调方法 并持续 2 秒钟
    }  
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ThursdayGame

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值