天天看點

UGUI(四)事件系統的封裝

UGUI的事件系統預設使用時,是需要目前的類繼承事件接口,就可以在該類中加入它的事件方法,但是在多人開發時這種方式沒什麼好處。

用過NGUI的或許都知道UIEventListener這個類,因為使用超級友善,直接加入UI對象進行事件注冊即可。其實UGUI也可以模仿這種方式進行封裝。

代碼如下:

  1. usingUnityEngine;
  2. usingSystem.Collections;
  3. usingUnityEngine.EventSystems;
  4. publicclassUUIEventListener

    : 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. publicdelegate

    voidVoidDelegate(GameObject

    go);

  20. publicVoidDelegate

    onClick;

  21. onDown;
  22. onEnter;
  23. onExit;
  24. onUp;
  25. onSelect;
  26. onUpdateSelect;
  27. onDeSelect;
  28. onDrag;
  29. onDragEnd;
  30. onDrop;
  31. onScroll;
  32. onMove;
  33. publicobject

    parameter;

  34. publicvoidOnPointerClick(PointerEventDataeventData) {

    if(onClick!=

    null)onClick(gameObject);

    }

  35. publicvoidOnPointerDown(PointerEventDataeventData) {

    if(onDown!=

    null)onDown(gameObject);

  36. publicvoidOnPointerEnter(PointerEventDataeventData) {

    if(onEnter!=

    null)onEnter(gameObject);

  37. publicvoidOnPointerExit(PointerEventDataeventData) {

    if(onExit!=

    null)onExit(gameObject);

  38. publicvoidOnPointerUp(PointerEventDataeventData) {

    if(onUp!=

    null)onUp(gameObject);

  39. publicvoidOnSelect(BaseEventDataeventData) {

    if(onSelect!=

    null)onSelect(gameObject);

  40. publicvoidOnUpdateSelected(BaseEventDataeventData) {

    if(onUpdateSelect!=

    null)onUpdateSelect(gameObject);

  41. publicvoidOnDeselect(BaseEventDataeventData) {

    if(onDeSelect!=

    null)onDeSelect(gameObject);

  42. publicvoidOnDrag(PointerEventDataeventData) {

    if(onDrag!=

    null)onDrag(gameObject);

  43. publicvoidOnEndDrag(PointerEventDataeventData) {

    if(onDragEnd!=

    null)onDragEnd(gameObject);

  44. publicvoidOnDrop(PointerEventDataeventData) {

    if(onDrop!=

    null)onDrop(gameObject);

  45. publicvoidOnScroll(PointerEventDataeventData) {

    if(onScroll!=

    null)onScroll(gameObject);

  46. publicvoidOnMove(AxisEventDataeventData) {

    if(onMove!=

    null)onMove(gameObject);

  47. staticpublicUUIEventListener

    Get(GameObject go)

  48. UUIEventListenerlistener

    = go.GetComponent();

  49. if(listener==

    null)listener

    = go.AddComponent();

  50. returnlistener;

使用方式:

  1. UUIEventListener.Get(btn.gameObject).onClick=

    OnClickBtn;

  2. UUIEventListener.Get(btn.gameObject).parameter=

    index;

  3. privatevoidOnClickBtn(GameObject

    go)

  4. intindex= (

    int)UUIEventListener.Get(go).parameter;

  5. Debug.Log("您單擊的索引為:"+

    index);