UGUI的事件系统默认使用时,是需要当前的类继承事件接口,就可以在该类中加入它的事件方法,但是在多人开发时这种方式没什么好处。
用过NGUI的或许都知道UIEventListener这个类,因为使用超级方便,直接加入UI对象进行事件注册即可。其实UGUI也可以模仿这种方式进行封装。
代码如下:
- using UnityEngine;
- using System.Collections;
- using UnityEngine.EventSystems;
- public class UUIEventListener : MonoBehaviour,
- IPointerClickHandler,
- IPointerDownHandler,
- IPointerEnterHandler,
- IPointerExitHandler,
- IPointerUpHandler,
- ISelectHandler,
- IUpdateSelectedHandler,
- IDeselectHandler,
- IDragHandler,
- IEndDragHandler,
- IDropHandler,
- IScrollHandler,
- IMoveHandler
- {
- public delegate void VoidDelegate(GameObject go);
- public VoidDelegate onClick;
- public VoidDelegate onDown;
- public VoidDelegate onEnter;
- public VoidDelegate onExit;
- public VoidDelegate onUp;
- public VoidDelegate onSelect;
- public VoidDelegate onUpdateSelect;
- public VoidDelegate onDeSelect;
- public VoidDelegate onDrag;
- public VoidDelegate onDragEnd;
- public VoidDelegate onDrop;
- public VoidDelegate onScroll;
- public VoidDelegate onMove;
- public object parameter;
- public void OnPointerClick(PointerEventData eventData) { if (onClick != null) onClick(gameObject); }
- public void OnPointerDown(PointerEventData eventData) { if (onDown != null) onDown(gameObject); }
- public void OnPointerEnter(PointerEventData eventData) { if (onEnter != null) onEnter(gameObject); }
- public void OnPointerExit(PointerEventData eventData) { if (onExit != null) onExit(gameObject); }
- public void OnPointerUp(PointerEventData eventData) { if (onUp != null) onUp(gameObject); }
- public void OnSelect(BaseEventData eventData) { if (onSelect != null) onSelect(gameObject); }
- public void OnUpdateSelected(BaseEventData eventData) { if (onUpdateSelect != null) onUpdateSelect(gameObject); }
- public void OnDeselect(BaseEventData eventData) { if (onDeSelect != null) onDeSelect(gameObject); }
- public void OnDrag(PointerEventData eventData) { if (onDrag != null) onDrag(gameObject); }
- public void OnEndDrag(PointerEventData eventData) { if (onDragEnd != null) onDragEnd(gameObject); }
- public void OnDrop(PointerEventData eventData) { if (onDrop != null) onDrop(gameObject); }
- public void OnScroll(PointerEventData eventData) { if (onScroll != null) onScroll(gameObject); }
- public void OnMove(AxisEventData eventData) { if (onMove != null) onMove(gameObject); }
- static public UUIEventListener Get(GameObject go)
- {
- UUIEventListener listener = go.GetComponent();
- if (listener == null) listener = go.AddComponent();
- return listener;
- }
- }
使用方式:
- UUIEventListener.Get(btn.gameObject).onClick = OnClickBtn;
- UUIEventListener.Get(btn.gameObject).parameter = index;
- private void OnClickBtn(GameObject go)
- {
- int index = (int)UUIEventListener.Get(go).parameter;
- Debug.Log("您单击的索引为:" + index);
- }