From 21c0b35c856622cfe6f9eecdcfec06b08d1c8bc7 Mon Sep 17 00:00:00 2001 From: xhxy <2290327506@qq.com> Date: Thu, 24 Apr 2025 21:51:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E9=81=BF=E5=85=8D=E8=A3=85?= =?UTF-8?q?=E7=AE=B1=E6=8B=86=E7=AE=B1=EF=BC=8C=E6=9C=89=E5=8F=82=E6=97=A0?= =?UTF-8?q?=E5=8F=82=E9=87=8D=E8=BD=BD=E7=9A=84=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scripts/ProjectBase/Event/EventCenter.cs | 98 +++++++++++++++++-- Assets/Scripts/ProjectBase/Event/Monster.cs | 2 +- Assets/Scripts/ProjectBase/Event/Other.cs | 15 ++- Assets/Scripts/ProjectBase/Event/Player.cs | 19 +++- Assets/Scripts/ProjectBase/Event/Task.cs | 14 ++- .../Scripts/ProjectBase/Scenes/ScenesMgr.cs | 2 +- 6 files changed, 132 insertions(+), 18 deletions(-) diff --git a/Assets/Scripts/ProjectBase/Event/EventCenter.cs b/Assets/Scripts/ProjectBase/Event/EventCenter.cs index a6be2a9..19e70e3 100644 --- a/Assets/Scripts/ProjectBase/Event/EventCenter.cs +++ b/Assets/Scripts/ProjectBase/Event/EventCenter.cs @@ -4,33 +4,79 @@ using UnityEngine; using UnityEngine.Events; using UnityEngine.Windows; +public interface IEventInfo//����һ���յĽӿ������ط�����,����ת��ԭ�� +{ + +} +public class EventInfo<T> : IEventInfo +{ + public UnityAction<T> action; + public EventInfo(UnityAction<T> action) + { + action += action; + } +} + +public class EventInfo : IEventInfo +{ + + public UnityAction action; + public EventInfo(UnityAction action) + { + this.action += action; + } +} + + + /// <summary> /// �¼����� /// 1.�ֵ� 2.ί�� 3.�۲������ģʽ +/// 4.���� /// </summary> public class EventCenter : BaseManager<EventCenter> { //key ---�¼����֣����磺�������������������ͨ�� �ȵȣ� //value --- ��Ӧ ��������¼� ��Ӧ��ί�к��� - private Dictionary<string , UnityAction<object>> eventDic = new Dictionary<string , UnityAction<object>>(); + private Dictionary<string , IEventInfo> eventDic = new Dictionary<string , IEventInfo>(); /// <summary> /// �����¼����� /// </summary> /// <param name="name">�¼�������</param> /// <param name="action">����������ʱ���ί�к���</param> - public void AddEventListener(string name,UnityAction<object> action) + public void AddEventListener<T>(string name,UnityAction<T> action) { //��û�ж�Ӧ���¼����� //�е���� if(eventDic.ContainsKey(name)) { - eventDic[name] += action;//�Ѿ����¼��������� + (eventDic[name] as EventInfo<T>).action += action;//�Ѿ����¼��������� } //û�е���� else { - eventDic.Add(name, action);//û�оͼ�һ�� + eventDic.Add(name, new EventInfo<T>(action));//û�оͼ�һ�� + } + } + + /// <summary> + /// ���ؼ����¼�,����Ҫ����,û�з��� + /// </summary> + /// <param name="name"></param> + /// <param name="action"></param> + public void AddEventListener(string name, UnityAction action) + { + //��û�ж�Ӧ���¼����� + //�е���� + if (eventDic.ContainsKey(name)) + { + (eventDic[name] as EventInfo).action += action;//�Ѿ����¼��������� + } + //û�е���� + else + { + eventDic.Add(name, new EventInfo(action));//û�оͼ�һ�� } } @@ -40,11 +86,24 @@ public class EventCenter : BaseManager<EventCenter> /// </summary> /// <param name="name"></param> /// <param name="action"></param> - public void RemoveEventListener(string name, UnityAction<object> action) + public void RemoveEventListener<T>(string name, UnityAction<T> action) { if(eventDic.ContainsKey(name)) { - eventDic[name] -= action; + (eventDic[name] as EventInfo<T>).action -= action; + } + } + + /// <summary> + /// �����¼��Ƴ�,û�з��� + /// </summary> + /// <param name="name"></param> + /// <param name="action"></param> + public void RemoveEventListener(string name, UnityAction action) + { + if (eventDic.ContainsKey(name)) + { + (eventDic[name] as EventInfo).action -= action; } } @@ -52,11 +111,34 @@ public class EventCenter : BaseManager<EventCenter> /// �¼����� /// </summary> /// <param name="name">��һ�����ֵ��¼�������</param> - public void EvennTrigger(string name,object info) + public void EventTrigger<T>(string name,T info) { if(eventDic.ContainsKey(name)) { - eventDic[name].Invoke(info);//�оʹ����¼� + if((eventDic[name] as EventInfo<T>).action != null) + { + (eventDic[name] as EventInfo<T>).action.Invoke(info); + } + + // eventDic[name].Invoke(info);//�оʹ����¼� + } + } + + /// <summary> + /// �����¼�������û�з��� + /// </summary> + /// <param name="name"></param> + /// <param name="info"></param> + public void EventTrigger(string name) + { + if (eventDic.ContainsKey(name)) + { + if ((eventDic[name] as EventInfo).action != null) + { + (eventDic[name] as EventInfo).action.Invoke(); + } + + // eventDic[name].Invoke(info);//�оʹ����¼� } } diff --git a/Assets/Scripts/ProjectBase/Event/Monster.cs b/Assets/Scripts/ProjectBase/Event/Monster.cs index 7c96430..6ace7d3 100644 --- a/Assets/Scripts/ProjectBase/Event/Monster.cs +++ b/Assets/Scripts/ProjectBase/Event/Monster.cs @@ -22,6 +22,6 @@ public class Monster : MonoBehaviour { Debug.Log("��������"); //�����¼� - EventCenter.GetInstance().EvennTrigger("MonsterDead",this); + EventCenter.GetInstance().EventTrigger<Monster>("MonsterDead",this); } } diff --git a/Assets/Scripts/ProjectBase/Event/Other.cs b/Assets/Scripts/ProjectBase/Event/Other.cs index 13a9aa1..a9d60ad 100644 --- a/Assets/Scripts/ProjectBase/Event/Other.cs +++ b/Assets/Scripts/ProjectBase/Event/Other.cs @@ -6,11 +6,22 @@ public class Other : MonoBehaviour { void Start() { - EventCenter.GetInstance().AddEventListener("MonsterDead", OtherWaitMonsterDeadDo); + EventCenter.GetInstance().AddEventListener<Monster>("MonsterDead", OtherWaitMonsterDeadDo); + + EventCenter.GetInstance().AddEventListener("Win", Win); + + // EventCenter.GetInstance().EventTrigger<Monster>("MonsterDead", �������); + EventCenter.GetInstance().EventTrigger("Win"); + } - public void OtherWaitMonsterDeadDo(object info) + public void OtherWaitMonsterDeadDo(Monster info) { Debug.Log("������������Ҫ������"); } + public void Win() + { + Debug.Log("���¼�����"); + } + } diff --git a/Assets/Scripts/ProjectBase/Event/Player.cs b/Assets/Scripts/ProjectBase/Event/Player.cs index baa8f23..48aef78 100644 --- a/Assets/Scripts/ProjectBase/Event/Player.cs +++ b/Assets/Scripts/ProjectBase/Event/Player.cs @@ -4,14 +4,25 @@ using UnityEngine; public class Player : MonoBehaviour { - + /* + void Start() + { + EventCenter.GetInstance().AddEventListener("MonsterDead",MonsterDeadDo); + } + + public void MonsterDeadDo(object info) + { + Debug.Log("��һ�ý���" +(info as Monster).name1); + }*/ + + void Start() { - EventCenter.GetInstance().AddEventListener("MonsterDead",MonsterDeadDo); + EventCenter.GetInstance().AddEventListener<Monster>("MonsterDead", MonsterDeadDo); } - public void MonsterDeadDo(object info) + public void MonsterDeadDo(Monster info) { - Debug.Log("��һ�ý���" +(info as Monster).name1); + Debug.Log("��һ�ý���" + info.name1); } } diff --git a/Assets/Scripts/ProjectBase/Event/Task.cs b/Assets/Scripts/ProjectBase/Event/Task.cs index 08177c5..9545da7 100644 --- a/Assets/Scripts/ProjectBase/Event/Task.cs +++ b/Assets/Scripts/ProjectBase/Event/Task.cs @@ -5,12 +5,22 @@ using UnityEngine; public class Task : MonoBehaviour { // Start is called before the first frame update + /* void Start() + { + EventCenter.GetInstance().AddEventListener("MonsterDead", TaskWaitMonsterDeadDo); + } + + public void TaskWaitMonsterDeadDo(object info) + { + Debug.Log("�����¼"); + }*/ + void Start() { - EventCenter.GetInstance().AddEventListener("MonsterDead", TaskWaitMonsterDeadDo); + EventCenter.GetInstance().AddEventListener<Monster>("MonsterDead", TaskWaitMonsterDeadDo); } - public void TaskWaitMonsterDeadDo(object info) + public void TaskWaitMonsterDeadDo(Monster info) { Debug.Log("�����¼"); } diff --git a/Assets/Scripts/ProjectBase/Scenes/ScenesMgr.cs b/Assets/Scripts/ProjectBase/Scenes/ScenesMgr.cs index e3e13aa..a93d7bb 100644 --- a/Assets/Scripts/ProjectBase/Scenes/ScenesMgr.cs +++ b/Assets/Scripts/ProjectBase/Scenes/ScenesMgr.cs @@ -48,7 +48,7 @@ public class ScenesMgr : BaseManager<ScenesMgr> while(!ao.isDone) { //�¼����� ����ַ� ������� �������þ��� - EventCenter.GetInstance().EvennTrigger("����������",ao.progress); + EventCenter.GetInstance().EventTrigger("����������",ao.progress); //������ȥ���½����� yield return ao.progress; }