UGUI(四)事件系统的封装
UGUI的事件系统默认使用时,是需要当前的类继承事件接口,就可以在该类中加入它的事件方法,但是在多人开发时这种方式没什么好处。
用过NGUI的或许都知道UIEventListener这个类,因为使用超级方便,直接加入UI对象进行事件注册即可。其实UGUI也可以模仿这种方式进行封装。
代码如下:
- usingUnityEngine;
- usingSystem.Collections;
- usingUnityEngine.EventSystems;
- publicclassUUIEventListener
: MonoBehaviour, - IPointerClickHandler,
- IPointerDownHandler,
- IPointerEnterHandler,
- IPointerExitHandler,
- IPointerUpHandler,
- ISelectHandler,
- IUpdateSelectedHandler,
- IDeselectHandler,
- IDragHandler,
- IEndDragHandler,
- IDropHandler,
- IScrollHandler,
- IMoveHandler
- {
- publicdelegate
voidVoidDelegate(GameObject
go); - publicVoidDelegate
onClick; - publicVoidDelegate
onDown; - publicVoidDelegate
onEnter; - publicVoidDelegate
onExit; - publicVoidDelegate
onUp; - publicVoidDelegate
onSelect; - publicVoidDelegate
onUpdateSelect; - publicVoidDelegate
onDeSelect; - publicVoidDelegate
onDrag; - publicVoidDelegate
onDragEnd; - publicVoidDelegate
onDrop; - publicVoidDelegate
onScroll; - publicVoidDelegate
onMove; - publicobject
parameter; - publicvoidOnPointerClick(PointerEventData
eventData) { if(onClick
!= null)onClick(gameObject);
} - publicvoidOnPointerDown(PointerEventData
eventData) { if(onDown
!= null)onDown(gameObject);
} - publicvoidOnPointerEnter(PointerEventData
eventData) { if(onEnter
!= null)onEnter(gameObject);
} - publicvoidOnPointerExit(PointerEventData
eventData) { if(onExit
!= null)onExit(gameObject);
} - publicvoidOnPointerUp(PointerEventData
eventData) { if(onUp
!= null)onUp(gameObject);
} - publicvoidOnSelect(BaseEventData
eventData) { if(onSelect
!= null)onSelect(gameObject);
} - publicvoidOnUpdateSelected(BaseEventData
eventData) { if(onUpdateSelect
!= null)onUpdateSelect(gameObject);
} - publicvoidOnDeselect(BaseEventData
eventData) { if(onDeSelect
!= null)onDeSelect(gameObject);
} - publicvoidOnDrag(PointerEventData
eventData) { if(onDrag
!= null)onDrag(gameObject);
} - publicvoidOnEndDrag(PointerEventData
eventData) { if(onDragEnd
!= null)onDragEnd(gameObject);
} - publicvoidOnDrop(PointerEventData
eventData) { if(onDrop
!= null)onDrop(gameObject);
} - publicvoidOnScroll(PointerEventData
eventData) { if(onScroll
!= null)onScroll(gameObject);
} - publicvoidOnMove(AxisEventData
eventData) { if(onMove
!= null)onMove(gameObject);
} - staticpublicUUIEventListener
Get(GameObject go) - {
- UUIEventListenerlistener
= go.GetComponent(); - if(listener
== null)listener
= go.AddComponent(); - returnlistener;
- }
- }
使用方式:
- UUIEventListener.Get(btn.gameObject).onClick=
OnClickBtn; - UUIEventListener.Get(btn.gameObject).parameter=
index; - privatevoidOnClickBtn(GameObject
go) - {
- intindex
= (int)UUIEventListener.Get(go).parameter; - Debug.Log("您单击的索引为:"+
index); - }
UGUI(四)事件系统的封装的更多相关文章
- 辛巴学院-Unity-剑英陪你零基础学c#系列(四)函数和封装
辛巴学院:正大光明的不务正业. 国庆长假结束了,我的心情是这样的: 你总是起不早,起不早独自一个人沉睡到天亮你无怨无悔的梦着那副本我知道你根本就不想上班你总是起不早,起不早放假总是短暂,上班太难请个病 ...
- Unity(四)IocContainer 封装类库
首先要在项目中安装Unity,通过NuGet搜索Unity. 1.定义接口 IDependencyResolver using System; using System.Collections.Gen ...
- iOS开发——UI篇Swift篇&玩转UItableView(四)自定义&封装
UItableView自定义&封装 一:Model class AppsModel: NSObject { //定义模型的三个属性 var imageName:String! //图片名称 v ...
- Java核心技术第四章——1.封装性
封装性(有时称为数据隐藏): 实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域值.程序仅通过对象的方法与对象的数据进行交互. 给对象赋予了"黑盒"的特征,提高了重用性 ...
- Selenium自动化测试Python四:WebDriver封装
WebDriver 封装 欢迎阅读WebDriver封装讲义.本篇讲义将会重点介绍Selenium WebDriver API的封装的概念和方法,以及使用封装进行自动化测试的设计. WebDriver ...
- python第四十三课——封装性
1.面向对象的三大特性:封装性.继承性.多态性 封装: 封装使用的领悟: 1).生活层面:食品.快递.计算机.明星... 2).计算机层面: ①.模块.类.函数... ②.属性数据的封装与隐藏 权限修 ...
- 第一百五十四节,封装库--JavaScript,表单验证--提交验证
封装库--JavaScript,表单验证--提交验证 将表单的所有必填项,做一个判断函数,填写正确时返回布尔值 最后在提交时,判断每一项是否正确,全部正确才可以 提交 html <div id= ...
- python 面向对象专题(四):封装、多态、鸭子类型、类的约束、super
https://www.cnblogs.com/liubing8/p/11321099.html 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 ...
- 第四课 OOP封装继承多态解析,接口抽象类选择 2019-04-21
父类 xx = new 子类(); xx.method(); 1 普通方法由编译时决定(左边) --- 提高效率 2 虚方法(virtual) 由运行时决定-- -多态,灵活 3 抽象方法由运行时决 ...
随机推荐
- Android笔记之manifestPlaceholders
有时根据项目需要,AndroidManifest.xml中的meta-data的值分测试和正式 为了能自动地更换meta-data值,就需要用到manifestPlaceholders 语法:mani ...
- mongodb学习之:文档操作
在上一章中有讲到文档的插入操作是用insert的方法.如果该集合不在该数据库中,mongodb会自动创建该集合并插入文档 用find的方法可以查找所有的集合数据 > db.maple.find( ...
- Linux常用命令——持续更新(2018-05-09)
此命令默认是在centos环境下执行,除非特殊标明. 1.查看ip: ifconfig 2.创建指定用户并分配到某个组:创建用户user并分配到root组 useradd -g root user 3 ...
- 局域网如何通过SSH连接虚拟机装的centOS系统
首先,在一个局域网内的一台机器上装了虚拟机,虚拟机上装了centos系统: 但是,只有本机能连接centos,其他电脑都连不上: ping了一下发现不通,然后排查原因. 我发现局域网内的机器IP都是: ...
- s1考试 图书管理系统 结构体版
#include <iostream> #include <string> #include <cstdio> #include <cstdlib> # ...
- appium(10)-iOS predictate
iOS predictate It is worth looking at ’-ios uiautomation’ search strategy with Predicates. UIAutomat ...
- hdu1010 Tempter of the Bone —— dfs+奇偶性剪枝
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 Tempter of the Bone Time Limit: 2000/1000 MS (Ja ...
- .cxx_destruct crash
开发过程中遇到 YXTBaseLabelCell .cxx_destruct崩溃,查了下,会在调用类的dealloc方法时调用cxx_destruct,于是看了下代码,找dealloc可能会崩溃的原因 ...
- MYSQL进阶学习笔记十五:MySQL 的账号权限赋予!(视频序号:进阶_33,34)
知识点十六:MySQL的账号权限赋予(33) 一.MySQL权限简介 关于mysql的权限简单的理解就是mysql允许你做你全力以内的事情,不可以越界.比如只允许你执行select操作,那么你就不能执 ...
- shell---rpm
[root@master src]# rpm -qpl epel-release-latest-6.noarch.rpm ##查询该rpm包安装了什么warning: epel-rel ...