在游戏中经常会用到事件,注册(监听)事件,派发事件,移除事件,写一个单监听的事件系统,用起来还是很方便的。
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调用