Unity中的事件监听中心

我对事件监听中心的理解是,某一个物体在触发其下某一个事件时,所带来的连锁反应

为了降低程序的耦合,减少依赖性,我们构造一个单例的事件监听中心

在该事件监听中心里,我们处理所有事件的所有连锁反应

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Events;

/// <summary>
/// 某一个事件 所引发 的连锁反应
/// </summary>
public class EventCenter : SingletonBase<EventCenter>
{
    //用字典存储 所有事件 以及 事件的所有关心者
    private Dictionary<string, UnityAction> eventDic = new Dictionary<string, UnityAction>();

    //事件触发
    public void EventTrigger(string name)
    {
        if (eventDic.ContainsKey(name))
            eventDic[name]?.Invoke();
    }

    //添加 某一个事件 的 关心者
    public void AddEventListener(string name, UnityAction func)
    {
        if (eventDic.ContainsKey(name))
            eventDic[name] += func;
        else
        {
            eventDic.Add(name, null);
            eventDic[name] += func;
        }
    }

    //移除 某一个事件 的 关心者
    public void RemoveEventListener(string name, UnityAction func)
    {
        if (eventDic.ContainsKey(name))
            eventDic[name] -= func;
    }

    //移除 事件中心 的 所有事件
    public void Clear()
    {
        eventDic.Clear();
    }

    //移除 某一个事件
    public void Clear(string name)
    {
        if (eventDic.ContainsKey(name))
            eventDic.Remove(name);
    }
}

值得一提的是

每一个关心者都应该在Awake的时候去关心事件,在OnDestroy的时候移除关心事件

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值