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. php 中 isset 和empty 的区别

    昨天终于开始学习php了,这个对于我来说听着很熟悉,但是学起来很陌生的东西,尤其是课上能听明白 但是真正写起了手生,都不知道手该往哪里放了,天哪~~~ 其中课上有讲到 isset和empty的区别,现 ...

  2. 九度OJ 1091:棋盘游戏 (DP、BFS、DFS、剪枝)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1497 解决:406 题目描述: 有一个6*6的棋盘,每个棋盘上都有一个数值,现在又一个起始位置和终止位置,请找出一个从起始位置到终止位置代 ...

  3. the ACID properties of HBase

    http://hbase.apache.org/acid-semantics.html Apache HBase (TM) is not an ACID compliant database. How ...

  4. Android笔记之DrawerLayout的基本使用

    效果图 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLay ...

  5. RNN 的入门程序DEMO

    1.视频介绍 https://www.youtube.com/watch?v=cdLUzrjnlr4 2. https://github.com/llSourcell/recurrent_neural ...

  6. Machine Learning in Action(2) 决策树算法

    决策树也是有监督机器学习方法. 电影<无耻混蛋>里有一幕游戏,在德军小酒馆里有几个人在玩20问题游戏,游戏规则是一个设迷者在纸牌中抽出一个目标(可以是人,也可以是物),而猜谜者可以提问题, ...

  7. [数据挖掘课程笔记]Naïve Bayesian Classifier

    朴素贝叶斯模型 1) X:一条未被标记的数据 2) H:一个假设,如H=X属于Ci类 根据贝叶斯公式 把X表示为(x1,x2,....xn) x1,x2,....xn表示X在各个特征上的值. 假设有c ...

  8. oracle rac常用的网络检查命令

    oracle的集群管理软件和数据库对私网依赖性很大,很多集群问题最后都可以归结到网络层面. 当集群出现问题时检查网络信息是必要的. 1.查看MTU的大小,确认所有节点的公网和私网网卡的MTU大小相同 ...

  9. BZOJ 1620 [Usaco2008 Nov]Time Management 时间管理:贪心

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1620 题意: 有n个工作,每一个工作完成需要花费的时间为tim[i],完成这项工作的截止日 ...

  10. kubernetes要实现的目标——随机关掉一台机器,看你的服务能否正常;减少的应用实例能否自动迁移并恢复到其他节点;服务能否随着流量进行自动伸缩

    Kubernetes 是来自 Google 云平台的开源容器集群管理系统.基于 Docker 构建一个容器的调度服务.该系统可以自动在一个容器集群中选择一个工作容器供使用.其核心概念是 Contain ...