自定义事件系统

在游戏中经常会用到事件,注册(监听)事件,派发事件,移除事件,写一个单监听的事件系统,用起来还是很方便的。
C#层事件系统定义

     public class EventTools
    {
        public delegate void EventCall(object param);//设置委托有参变量
        private static Dictionary<int, EventTools.EventCall> data = new Dictionary<int, EventTools.EventCall>();//事件队列

        /// <summary>
        /// 注册事件
        /// </summary>
        /// <param name="id">事件id</param>
        /// <param name="callBack">事件回调</param>
        public static void RegisterEvent(int id, EventTools.EventCall callBack)
        {
            bool flag = EventTools.data.ContainsKey(id);
            if (flag)
            {
                EventTools.data[id] = callBack;
            }
            else
            {
                EventTools.data.Add(id, callBack);
            }
        }
        /// <summary>
        /// 移除事件
        /// </summary>
        /// <param name="id"></param>
        public static void RemoveEvent(int id)
        {
            bool flag = EventTools.data.ContainsKey(id);
            if (flag)
            {
                EventTools.data.Remove(id);
            }
        }
        /// <summary>
        /// 派发事件
        /// </summary>
        /// <param name="id"></param>
        /// <param name="param"></param>
        public static void SendEvent(int id, object param = null)
        {
            bool flag = EventTools.data.ContainsKey(id);
            if (flag)
            {
                EventTools.data[id](param);
            }
            else
            {
                //Debug.Log(typeof(EventTools)+"send event of id = " + id + " is not be Register");
            }
        }

    }

在提供对应的接口供lua调用

猜你喜欢

转载自blog.csdn.net/baidu_39447417/article/details/79764962