Unity事件管理器封装(简易版-初级入门)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;


public class EventManage
{
    //C#单例
    static EventManage instance;
    public static EventManage Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new EventManage();
            }
            return instance;
        }
    }
    EventManage() { }

    /*存储各种事件的字典  
     * 键为事件的标识符 比如 “添加分数”  “打开关卡门”
     * 值为一个委托 
     *    委托的返回值为任意类型,如果不需要返回值可以  return null
     *    委托的参数是  object[],  如果不需要参数可以填null  如果有1到多个参数,可以构建成object[] 
     *         比如:  new object[] {"空银子",14,true};  使用时根据角标获取  objects[0]  objects[1]
     * 如果想节省object类型拆箱装箱的性能消耗,可以根据自己需求修改这个委托,我图方便就用object类型了        
     */
    public Dictionary<string, Func<object[], object>> events = new Dictionary<string, Func<object[], object>>();


    /// <summary>
    /// 注册事件的方法
    /// </summary>
    /// <param name="sign">事件名称</param>
    /// <param name="ac"></param>
    public void On(string sign, Func<object[], object> ac)
    {
        //判断是否已经存在这个标识符的事件   如果不存在就加入到字典里   
        if (events.ContainsKey(sign))
        {
            //委托的知识,如果不理解这步操作可以去复习一下
            events[sign] += ac;
        }
        else
        {
            events.Add(sign, ac);
        }
    }

    /// <summary>
    /// 执行事件的方法
    /// </summary>
    /// <param name="sign">事件名称</param>
    /// <param name="o">事件参数</param>
    /// <returns></returns>
    public object Event(string sign, object[] o=null)
    {
        if (events.ContainsKey(sign))
        {
Utils.Log(sign+"event name");
            return events[sign](o);
        }
        else
        {   //算是安全校验, 个人写代码这方面积极性不是很足,不过最好还是尽量写一下
            Debug.Log("不存在标识为" + sign + "的事件,请先添加");
            return null;
        }
    }


}

如何使用:


//接收事件消息
EventManage.Instance.On(EventName.Net_Register_Success, (object[] o) =>
        {
            //处理事件逻辑




            return null;
        });

//发送事件消息
 EventManage.Instance.Event("事件名称",参数(可以为null));

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值