1.先看下怎么使用的

1)脚本中注册逻辑事件

        void Start () 
        {
            m_pGUICanvasObj = GameObject.Find("Canvas");
            if(m_pGUICanvasObj != null)
            {
                m_pGUICanvasObj.SetActive(false);
            }
       //为当前MonoBehaviour脚本注册对于MENU_VISIBLE_CHANGED事件的监听器
            EventDispatchModule.GetSingletonInstance().RegisterEventHandler(LOGIC_EVENT_ID.MENU_VISIBLE_CHANGED,this);
        }

2)脚本销毁时移除

        void OnDestroy() 
        {
       //当脚本销毁时,移除监听器 EventDispatchModule.GetSingletonInstance().RemoveEventHandler(LOGIC_EVENT_ID.MENU_VISIBLE_CHANGED,
this); }

3)发送全局逻辑事件

        public void Btn_BackToGame()
        {
            m_bShowMenu = false;
            //这里全局逻辑事件传递的参数可以是任意类型的,以引用传递
            EventDispatchModule.SendWrap<bool>(LOGIC_EVENT_ID.MENU_VISIBLE_CHANGED,ref m_bShowMenu);
        }

4)响应逻辑事件(这里暂时比较挫,没有以回调的形式体现,后面再改)

        public bool HandMessage(LOGIC_EVENT_ID iLogicEventID, ref object obj)
        {
            switch(iLogicEventID)
            {
            case LOGIC_EVENT_ID.MENU_VISIBLE_CHANGED:
            {
                OnMenuVisibleChanged();
                return true;//return true 表示其它监听器可以继续处理该事件,false表示吞噬事件
            }
            default:
                break;
            }
            return true;
        }

2.实现细节

1)所有需要监听消息的类,实现EventListener接口

public interface EventListener
{
    //return true-continue.
    //return false-end.
    bool HandMessage(LOGIC_EVENT_ID iLogicEventID,ref object obj);
}

2)附上上文的XCraft.CtrlScript脚本代码

 

using UnityEngine;
using System.Collections;
using XCraft.HighLevelManager;
using XCraft.Module;
namespace XCraft.CtrlScript
{
    public class GUICtrl : MonoBehaviour ,EventListener{
        private bool m_bShowMenu = false;
        private GameObject m_pGUICanvasObj = null;

        public bool HandMessage(LOGIC_EVENT_ID iLogicEventID, ref object obj)
        {
            switch(iLogicEventID)
            {
            case LOGIC_EVENT_ID.MENU_VISIBLE_CHANGED:
            {
                OnMenuVisibleChanged();
                return true;
            }
            default:
                break;
            }
            return true;
        }

        void OnDestroy() 
        {
            EventDispatchModule.GetSingletonInstance().RemoveEventHandler(LOGIC_EVENT_ID.MENU_VISIBLE_CHANGED,this);
        }

        // Use this for initialization
        void Start () 
        {
            m_pGUICanvasObj = GameObject.Find("Canvas");
            if(m_pGUICanvasObj != null)
            {
                m_pGUICanvasObj.SetActive(false);
            }

            EventDispatchModule.GetSingletonInstance().RegisterEventHandler(LOGIC_EVENT_ID.MENU_VISIBLE_CHANGED,this);
        }
        
        // Update is called once per frame
        void Update () 
        {
            ApplicationManager.GetSingletonInstance().UpdateInstances(Time.deltaTime);

            if(Input.GetKeyDown(KeyCode.Escape))
            {
                m_bShowMenu = !m_bShowMenu;

                EventDispatchModule.SendWrap<bool>(LOGIC_EVENT_ID.MENU_VISIBLE_CHANGED,ref m_bShowMenu);
            }
        }

        private void OnMenuVisibleChanged()
        {
            if(m_bShowMenu == true)
            {
                Debug.Log("Show Menu");
                if(m_pGUICanvasObj != null)
                {
                    m_pGUICanvasObj.SetActive(true);
                }

            }
            else
            {
                Debug.Log("Close Menu");
                if(m_pGUICanvasObj != null)
                {
                    m_pGUICanvasObj.SetActive(false);
                }
            }
        }

        public void Btn_BackToGame()
        {
            m_bShowMenu = false;

            EventDispatchModule.SendWrap<bool>(LOGIC_EVENT_ID.MENU_VISIBLE_CHANGED,ref m_bShowMenu);
        }

        public void Btn_SaveAndReturn()
        {
            Application.LoadLevel("TitleScene");
        }

    }
}
    
View Code

相关文章:

  • 2022-12-23
  • 2022-02-01
  • 2021-09-02
  • 2021-08-12
  • 2022-03-12
  • 2022-02-03
  • 2021-09-05
  • 2021-09-05
猜你喜欢
  • 2021-10-24
  • 2022-12-23
  • 2021-07-18
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案