unity---事件中心
耦合性低,统一管理#
代码#
注册事件#
触发事件#
移除事件#
切换场景时需要清空事件#
当我们要给事件添加参数时#
优化#
利用接口继承优化,避免装箱拆箱
(引用类型和值类型之间的转换)
完整代码(最终形态)#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public interface IEventInfo //父类接口
{
}
public class EventInfo<T>:IEventInfo{
public UnityAction<T> actions; //带参
public EventInfo(UnityAction<T> action){
actions += action;
}
}
public class EventInfo:IEventInfo{
public UnityAction actions; //不带参
public EventInfo(UnityAction action){
actions += action;
}
}
public class EventCenter : Singleton<EventCenter>
{
// Start is called before the first frame update
private Dictionary<string,IEventInfo > eventDic=new Dictionary<string, IEventInfo>();
// Update is called once per frame
public void AddEventListener<T>(string name,UnityAction<T> action){
if(eventDic.ContainsKey(name)){
(eventDic[name] as EventInfo<T>).actions+=action;
}else {
eventDic.Add(name,new EventInfo<T>(action));
}
}
public void AddEventListener(string name,UnityAction action){
if(eventDic.ContainsKey(name)){
(eventDic[name] as EventInfo).actions+=action;
}else {
eventDic.Add(name,new EventInfo(action));
}
}
public void EventTrigger<T>(string name,T info){
if(eventDic.ContainsKey(name)){
if((eventDic[name] as EventInfo<T>).actions!= null)
( eventDic[name] as EventInfo<T> ).actions(info);
}
}
public void EventTrigger(string name){
if(eventDic.ContainsKey(name)){
if((eventDic[name] as EventInfo).actions!= null)
( eventDic[name] as EventInfo).actions();
}
}
public void RemoveEventListener<T>(string name,UnityAction<T> action){
if(eventDic.ContainsKey(name)){
(eventDic[name] as EventInfo<T>).actions-=action;
}
}
public void RemoveEventListener(string name,UnityAction action){
if(eventDic.ContainsKey(name)){
(eventDic[name] as EventInfo).actions-=action;
}
}
public void Clear(){
eventDic.Clear();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)