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. Spring Data MongoDB 四:基本文档改动(update)(一)

    Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 二:MongoDB加入.删除.改动 一.简单介绍 Spring Data  Mo ...

  2. EasyRTMP手机直播推送rtmp流flash无法正常播放问题

    本文转自EasyDarwin团队Kim的博客:http://blog.csdn.net/jinlong0603/article/details/52960750 问题简介 EasyRTMP是EasyD ...

  3. 九度OJ 1110:小白鼠排队 (排序)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1734 解决:1054 题目描述: N只小白鼠(1 <= N <= 100),每只鼠头上戴着一顶有颜色的帽子.现在称出每只白鼠的 ...

  4. PAT 天梯赛 L2-013. 红色警报 【BFS】

    题目链接 https://www.patest.cn/contests/gplt/L2-013 思路 可以通过图的连通块个数来判断 假如 一座城市的失去 改变了其他城市之间的连通性 那么 这座城市本来 ...

  5. XMPP学习笔记 -- RFC 6120

    XMPP - Extensible Messaging and Presence Protocol 1. 中文版3920 http://wiki.jabbercn.org/RFC3920 2. 大部分 ...

  6. POJ1456 Supermarket —— 贪心 + 路径压缩优化

    题目链接:http://poj.org/problem?id=1456 Supermarket Time Limit: 2000MS   Memory Limit: 65536K Total Subm ...

  7. avf_showspectrum.c:112: undefined reference to `av_rdft_end

    下面还有一堆错,是由于ffmpeg库没编好,重新编好即可

  8. ffmpeg遇到inttypes.h和UINT64_C

    http://blog.csdn.net/cll131421/article/details/7763657 编译过程:错误一:无法打开包括文件:“inttypes.h”: No such file ...

  9. hdu-5003 Osu!(水题)

    题目链接: Osu! time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Prob ...

  10. Vue.js style(内联样式)

    Vue.js style(内联样式) 我们可以在 v-bind:style 直接设置样式: <div id="app"> <div v-bind:style=&q ...