Unity 基于UnityEvent实现轻量级事件管理器

本文参考:https://blog.csdn.net/z625309640/article/details/80547877

代码在文末,直接复制到你的工程中,就可以使用

 

目录

一、UnityEvent

二、本事件系统主要原理

三、单例模式

四、正式开始写代码吧

五、怎么使用?

六、完整代码

七、装箱拆箱优化


因为这个简单的事件管理器在我完成某项作业时帮了我很大的忙,所以特地记录下;

该事件系统是基于UnityEvent实现的,在应对小型工程时还是游刃有余的,可以说是解耦利器,如果你是unity初学者的话,可以试一试这个事件系统。原博客只给出了代码,我这边就稍微扩展一下

一、UnityEvent

 UnityEvent有三个公共方法,官网截图如下:

 分别是:

将监听函数添加UnityEvent;

触发调用已注册的监听函数(回调函数)

删除监听

在代码量较少的情况下,直接使用是没有什么问题,但是一旦代码数量变大,工程中的模块变多,就会显得很混乱,这个时候就有必要对其进行封装

二、本事件系统主要原理

这个事件系统主要通过一个字典将抽象的事件和具体的回调函数联系在一起,我们可以这样定义这个字典:

private Dictionary<Enum, UnityEvent> eventDictionary = new Dictionary<Enum, UnityEvent>();

对于字典的值:如果UnityEvent想要带有参数,可以在上面代码的基础上,将UnityEvent改为UnityEvent<T>,由于事先不知道传的参数类型,可以直接定义为object类型,即UnityEvent<Object>;

或者还想加入其他的一些操作,可以创建一个新类,继承至UnityEvent,可以将上面的代码改为:

        private class EventMode:UnityEvent<object>
        {

        }
        private Dictionary<Enum, EventMode> m_eventDictionary = new Dictionary<Enum, EventMode>();

对于字典的键:定义为System.Enum,它是一个抽象类,在c#中,所有的枚举类都继承自它。因此,可以在一个文件中专门定义不同操作的枚举类,在本文后面的实例演示中,就可看到用这个抽象类做字典的键的好处,最终可以实现枚举类中的某一个值与其对应的事件进行绑定,并存放在字典中,这样的功能;

三、单例模式

在正式通过代码实现这个事件系统时,我们还要考虑,对于这个事件系统,我们是不是只希望在整个游戏中只有一个实例,并持久化的存在,如果是的话,我们可以使用单例模式:

        /// <summary>
        /// 单例模式
        /// </summary>
        private static LiteEventManager instance;

        public static LiteEventManager Instance
        {
            get
            {
                if(instance == null)
                {
            
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值