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); - }