UGUI(四)事件系统的封装

来源:互联网 发布:js new操作符 编辑:程序博客网 时间:2024/04/29 17:45

UGUI的事件系统默认使用时,是需要当前的类继承事件接口,就可以在该类中加入它的事件方法,但是在多人开发时这种方式没什么好处。

用过NGUI的或许都知道UIEventListener这个类,因为使用超级方便,直接加入UI对象进行事件注册即可。其实UGUI也可以模仿这种方式进行封装。

 

代码如下:

  1. using UnityEngine;  
  2. using System.Collections;  
  3. using UnityEngine.EventSystems;  
  4. public class UUIEventListener MonoBehaviour,  
  5.                                 IPointerClickHandler,  
  6.                                 IPointerDownHandler,  
  7.                                 IPointerEnterHandler,  
  8.                                 IPointerExitHandler,  
  9.                                 IPointerUpHandler,  
  10.                                 ISelectHandler,  
  11.                                 IUpdateSelectedHandler,  
  12.                                 IDeselectHandler,  
  13.                                 IDragHandler,  
  14.                                 IEndDragHandler,  
  15.                                 IDropHandler,  
  16.                                 IScrollHandler,  
  17.                                 IMoveHandler  
  18.  
  19.     public delegate void VoidDelegate(GameObject go);  
  20.     public VoidDelegate onClick;  
  21.     public VoidDelegate onDown;  
  22.     public VoidDelegate onEnter;  
  23.     public VoidDelegate onExit;  
  24.     public VoidDelegate onUp;  
  25.     public VoidDelegate onSelect;  
  26.     public VoidDelegate onUpdateSelect;  
  27.     public VoidDelegate onDeSelect;  
  28.     public VoidDelegate onDrag;  
  29.     public VoidDelegate onDragEnd;  
  30.     public VoidDelegate onDrop;  
  31.     public VoidDelegate onScroll;  
  32.     public VoidDelegate onMove;  
  33.   
  34.     public object parameter;  
  35.   
  36.     public void OnPointerClick(PointerEventData eventData) if (onClick != nullonClick(gameObject);  
  37.     public void OnPointerDown(PointerEventData eventData) if (onDown != nullonDown(gameObject);  
  38.     public void OnPointerEnter(PointerEventData eventData) if (onEnter != nullonEnter(gameObject);  
  39.     public void OnPointerExit(PointerEventData eventData) if (onExit != nullonExit(gameObject);  
  40.     public void OnPointerUp(PointerEventData eventData) if (onUp != nullonUp(gameObject);  
  41.     public void OnSelect(BaseEventData eventData) if (onSelect != nullonSelect(gameObject);  
  42.     public void OnUpdateSelected(BaseEventData eventData) if (onUpdateSelect != nullonUpdateSelect(gameObject);  
  43.     public void OnDeselect(BaseEventData eventData) if (onDeSelect != nullonDeSelect(gameObject);  
  44.     public void OnDrag(PointerEventData eventData) if (onDrag != nullonDrag(gameObject);  
  45.     public void OnEndDrag(PointerEventData eventData) if (onDragEnd != nullonDragEnd(gameObject);  
  46.     public void OnDrop(PointerEventData eventData) if (onDrop != nullonDrop(gameObject);  
  47.     public void OnScroll(PointerEventData eventData) if (onScroll != nullonScroll(gameObject);  
  48.     public void OnMove(AxisEventData eventData) if (onMove != nullonMove(gameObject);  
  49.   
  50.     static public UUIEventListener Get(GameObject go)  
  51.      
  52.         UUIEventListener listener go.GetComponent();  
  53.         if (listener == nulllistener go.AddComponent();  
  54.         return listener;  
  55.      
  56.  

使用方式:

  1. UUIEventListener.Get(btn.gameObject).onClick OnClickBtn;     
  2. UUIEventListener.Get(btn.gameObject).parameter index;     
  3.       
  4. private void OnClickBtn(GameObject go)     
  5.     
  6.     int index (int)UUIEventListener.Get(go).parameter;     
  7.     Debug.Log("您单击的索引为:" index);     
0 0