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. publicVoidDelegate
    onDown;
  22. publicVoidDelegate
    onEnter;
  23. publicVoidDelegate
    onExit;
  24. publicVoidDelegate
    onUp;
  25. publicVoidDelegate
    onSelect;
  26. publicVoidDelegate
    onUpdateSelect;
  27. publicVoidDelegate
    onDeSelect;
  28. publicVoidDelegate
    onDrag;
  29. publicVoidDelegate
    onDragEnd;
  30. publicVoidDelegate
    onDrop;
  31. publicVoidDelegate
    onScroll;
  32. publicVoidDelegate
    onMove;
  33. publicobject
    parameter;
  34. publicvoidOnPointerClick(PointerEventData
    eventData) { if(onClick
    != null)onClick(gameObject);
    }
  35. publicvoidOnPointerDown(PointerEventData
    eventData) { if(onDown
    != null)onDown(gameObject);
    }
  36. publicvoidOnPointerEnter(PointerEventData
    eventData) { if(onEnter
    != null)onEnter(gameObject);
    }
  37. publicvoidOnPointerExit(PointerEventData
    eventData) { if(onExit
    != null)onExit(gameObject);
    }
  38. publicvoidOnPointerUp(PointerEventData
    eventData) { if(onUp
    != null)onUp(gameObject);
    }
  39. publicvoidOnSelect(BaseEventData
    eventData) { if(onSelect
    != null)onSelect(gameObject);
    }
  40. publicvoidOnUpdateSelected(BaseEventData
    eventData) { if(onUpdateSelect
    != null)onUpdateSelect(gameObject);
    }
  41. publicvoidOnDeselect(BaseEventData
    eventData) { if(onDeSelect
    != null)onDeSelect(gameObject);
    }
  42. publicvoidOnDrag(PointerEventData
    eventData) { if(onDrag
    != null)onDrag(gameObject);
    }
  43. publicvoidOnEndDrag(PointerEventData
    eventData) { if(onDragEnd
    != null)onDragEnd(gameObject);
    }
  44. publicvoidOnDrop(PointerEventData
    eventData) { if(onDrop
    != null)onDrop(gameObject);
    }
  45. publicvoidOnScroll(PointerEventData
    eventData) { if(onScroll
    != null)onScroll(gameObject);
    }
  46. publicvoidOnMove(AxisEventData
    eventData) { if(onMove
    != null)onMove(gameObject);
    }
  47. staticpublicUUIEventListener
    Get(GameObject go)
  48. {
  49. UUIEventListenerlistener
    = go.GetComponent();
  50. if(listener
    == null)listener
    = go.AddComponent();
  51. returnlistener;
  52. }
  53. }

使用方式:

  1. UUIEventListener.Get(btn.gameObject).onClick=
    OnClickBtn;
  2. UUIEventListener.Get(btn.gameObject).parameter=
    index;
  3. privatevoidOnClickBtn(GameObject
    go)
  4. {
  5. intindex
    = (int)UUIEventListener.Get(go).parameter;
  6. Debug.Log("您单击的索引为:"+
    index);
  7. }

UGUI(四)事件系统的封装的更多相关文章

  1. 辛巴学院-Unity-剑英陪你零基础学c#系列(四)函数和封装

    辛巴学院:正大光明的不务正业. 国庆长假结束了,我的心情是这样的: 你总是起不早,起不早独自一个人沉睡到天亮你无怨无悔的梦着那副本我知道你根本就不想上班你总是起不早,起不早放假总是短暂,上班太难请个病 ...

  2. Unity(四)IocContainer 封装类库

    首先要在项目中安装Unity,通过NuGet搜索Unity. 1.定义接口 IDependencyResolver using System; using System.Collections.Gen ...

  3. iOS开发——UI篇Swift篇&玩转UItableView(四)自定义&封装

    UItableView自定义&封装 一:Model class AppsModel: NSObject { //定义模型的三个属性 var imageName:String! //图片名称 v ...

  4. Java核心技术第四章——1.封装性

    封装性(有时称为数据隐藏): 实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域值.程序仅通过对象的方法与对象的数据进行交互. 给对象赋予了"黑盒"的特征,提高了重用性 ...

  5. Selenium自动化测试Python四:WebDriver封装

    WebDriver 封装 欢迎阅读WebDriver封装讲义.本篇讲义将会重点介绍Selenium WebDriver API的封装的概念和方法,以及使用封装进行自动化测试的设计. WebDriver ...

  6. python第四十三课——封装性

    1.面向对象的三大特性:封装性.继承性.多态性 封装: 封装使用的领悟: 1).生活层面:食品.快递.计算机.明星... 2).计算机层面: ①.模块.类.函数... ②.属性数据的封装与隐藏 权限修 ...

  7. 第一百五十四节,封装库--JavaScript,表单验证--提交验证

    封装库--JavaScript,表单验证--提交验证 将表单的所有必填项,做一个判断函数,填写正确时返回布尔值 最后在提交时,判断每一项是否正确,全部正确才可以 提交 html <div id= ...

  8. python 面向对象专题(四):封装、多态、鸭子类型、类的约束、super

    https://www.cnblogs.com/liubing8/p/11321099.html 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 ...

  9. 第四课 OOP封装继承多态解析,接口抽象类选择 2019-04-21

    父类 xx = new 子类(); xx.method(); 1 普通方法由编译时决定(左边) --- 提高效率 2 虚方法(virtual)  由运行时决定-- -多态,灵活 3 抽象方法由运行时决 ...

随机推荐

  1. C#特性类的使用

    特性类的使用过程: 第一步:定义一个特性类,定义一些成员来包含验证时需要的数据:第二步:创建特性类实例:创建一个特性类的实例,里面包含着验证某一个属性或者字段需要的数据.将该实例关联到某个属性上面.第 ...

  2. 面试题三:设计包括 min 函数的栈。

    3.设计包括 min 函数的栈. 定义栈的数据结构,要求加入一个 min 函数.可以得到栈的最小元素. 要求函数 min.push 以及 pop 的时间复杂度都是 O(1). 思路分析: a.要想一个 ...

  3. 调用Windows API实现GBK和UTF-8的相互转换

    GBK转UTF-8示例 GbkToUtf8.cpp #include <Windows.h> #include <iostream> #include <string&g ...

  4. HDOJ 4689 Derangement DP

    DP具体解释见: http://blog.csdn.net/liguan1/article/details/10468139 Derangement Time Limit: 7000/7000 MS ...

  5. ABAP内存运用

    (1)ABAP 内存运用语句: EXPORT  LT_ITAB  TO MEMORY  ID ‘MM’. IMOIRT   LT_ITTAB FROM MEMORY  ID ‘MM’. (2)SAP内 ...

  6. ABAP DEMO-2018

    sap Program DEMO 介绍 Program Description BALVBT01 Example SAP program for displying multiple ALV repo ...

  7. Codeforces Round #374 (Div. 2) A. One-dimensional Japanese Crossword —— 基础题

    题目链接:http://codeforces.com/contest/721/problem/A A. One-dimensional Japanese Crossword time limit pe ...

  8. Appium——详解Appium server capabilities

      appium server capabilities来告诉appium,如何运行自动化测试,因此需要详细了解. 官方文档:http://appium.io/slate/en/master/?rub ...

  9. 电脑设备对于IT人员,犹如武器对于士兵

    本人做了多年Softwarer,写些感受. 比我们早的老一代程序员更是用自己的健康总结了一些经验. 先说关于健康方面: 程序员要长期坐着,这对健康损害很大,颈椎腰椎,心肺能力都会衰减.以前只是听说,自 ...

  10. Java 8新特性之旅:使用Stream API处理集合

    在这篇“Java 8新特性教程”系列文章中,我们会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值. 在之前的文章“遍历.过滤.处理集合及使用Lambda ...