前段时间,场景里面Inspector面板用类似UnityEvent实现的触发各种自定义事件有几个点欠缺:
1.没有统一,到处都是在Inspector面板拖拽很难找。
2.可能存在拖拽的信息或者修改了方法名、参数名自己也忘记了(我就是被这个给坑了QAQ)。
3.没有统一,不好后续管理。
所以尝试着写了个消息系统,自己做个记录,以防以后需要往其中新添加其他功能自己也忘记思路了,其实套路很简单,直接代码:
Part1:
1.可以看到管理中消息id用的int,这是为了方便和自定义的消息类型用枚举变量相互转换。TSingleton是一个单例模式的模板,实现方式很简单,就不再赘述。基本的方法就是注册、注销消息,所有监听者派发消息及对指定监听者发消息的重载函数。
2.代码中可能有的地方用了一些扩展方法和Lambda表达式:Unity扩展方法
#region 事件类型
public enum BaseEvent
{
Null,
显示,
隐藏,
}
#endregion
public class EventSystem : TSingleton<EventSystem>
{
private class MonoEvent
{
private List<MonoBase> monoBases = new List<MonoBase>();
public MonoEvent(MonoBase monoBase)