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. EasyCamera Android安卓移动视频监控单兵设备接入EasyDarwin开源流媒体云平台

    前言 随着Android系统的不断更新和发展,现在越来越多的硬件产品选择用安卓系统作为运行环境,电视机,机顶盒.门禁.行车记录仪.车载系统.单兵设备等等,Android系统底层还是Linux,但对上层 ...

  2. 九度OJ 1138:进制转换 (进制转换)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2388 解决:935 题目描述: 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出. 输入: 多组数据,每行为一个长度不超过30 ...

  3. What the 80/20 Rule Tells Us about Reducing HTTP Requests

    Performance Research, Part 1: What the 80/20 Rule Tells Us about Reducing HTTP Requests https://yuib ...

  4. 使用JavaScript获取浏览器UserAgent

    可以在浏览器地址栏输入about:version来查看UserAgent等信息 但是在Win10系统,本人亲测,IE和Edge用这样的方式都获取不到信息 在我惯用的QQ浏览器上倒是可以获取到 为了能方 ...

  5. git文章列表

    关于gitlab默认clone协议 Git实现从本地加入项目到远程仓库 翻翻git之---一个简单的标签控件 LabelView (随手发了两张小宝宝的玩耍照) id=1125" targe ...

  6. wireshark 学习 2

    使用wireshark抓到的wifi数据包如果是加密的,就只能显示密文,无法得到真正的数据. 如果知道AP和SSID和key,就可以解密wifi数据包,显示上层协议的数据. 在wireshark中设置 ...

  7. 3种方式实现python多线程并发处理

    标签: python奇淫技巧 最优线程数 Ncpu=CPU的数量 Ucpu=目标CPU使用率 W/C=等待时间与计算时间的比率 为保持处理器达到期望的使用率,最优的线程池的大小等于$$Nthreads ...

  8. Intellij IDEA 修改代码后自动编译更新

    Intellij IDEA 一些不为人知的技巧 问题描述: Intellij IDEA 调试修改时,改动页面和 java 文件后,无法立刻看到变化,需要手动重启服务. 问题原因: 在 IDEA tom ...

  9. 洛谷【P839】【NOI导刊】——数页码

    题面 一道找规律好题... 首先,我们肯定只能一位一位的统计答案,考虑从高位向低位统计,显然这样要方便的多. 对于第i位,我们统计从$a[i+1]*10^i+0$到$a[i+1]*10^i+a[i]* ...

  10. datagrid 行号问题综合

    1.datagrid 左侧行号设置宽度 : 到 easyui.css 中修改 .datagrid-cell-rownumber 中 width 的宽度.