UGUI(四)事件系统的封装

UGUI(四)事件系统的封装

  (2015-02-05 11:48:51)
标签: 

ugui事件

 

ugui注册事件

分类: UGUI

 

UGUI的事件系统默认使用时,是需要当前的类继承事件接口,就可以在该类中加入它的事件方法,但是在多人开发时这种方式没什么好处。

用过NGUI的或许都知道UIEventListener这个类,因为使用超级方便,直接加入UI对象进行事件注册即可。其实UGUI也可以模仿这种方式进行封装。

 

代码如下:

  1. using UnityEngine;  
  2. using System.Collections;  
  3. using UnityEngine.EventSystems;  
  4. public class UUIEventListener : 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.     public delegate void VoidDelegate(GameObject go);  
  20.     public VoidDelegate onClick;  
  21.     public VoidDelegate onDown;  
  22.     public VoidDelegate onEnter;  
  23.     public VoidDelegate onExit;  
  24.     public VoidDelegate onUp;  
  25.     public VoidDelegate onSelect;  
  26.     public VoidDelegate onUpdateSelect;  
  27.     public VoidDelegate onDeSelect;  
  28.     public VoidDelegate onDrag;  
  29.     public VoidDelegate onDragEnd;  
  30.     public VoidDelegate onDrop;  
  31.     public VoidDelegate onScroll;  
  32.     public VoidDelegate onMove;  
  33.   
  34.     public object parameter;  
  35.   
  36.     public void OnPointerClick(PointerEventData eventData) { if (onClick != null) onClick(gameObject); }  
  37.     public void OnPointerDown(PointerEventData eventData) { if (onDown != null) onDown(gameObject); }  
  38.     public void OnPointerEnter(PointerEventData eventData) { if (onEnter != null) onEnter(gameObject); }  
  39.     public void OnPointerExit(PointerEventData eventData) { if (onExit != null) onExit(gameObject); }  
  40.     public void OnPointerUp(PointerEventData eventData) { if (onUp != null) onUp(gameObject); }  
  41.     public void OnSelect(BaseEventData eventData) { if (onSelect != null) onSelect(gameObject); }  
  42.     public void OnUpdateSelected(BaseEventData eventData) { if (onUpdateSelect != null) onUpdateSelect(gameObject); }  
  43.     public void OnDeselect(BaseEventData eventData) { if (onDeSelect != null) onDeSelect(gameObject); }  
  44.     public void OnDrag(PointerEventData eventData) { if (onDrag != null) onDrag(gameObject); }  
  45.     public void OnEndDrag(PointerEventData eventData) { if (onDragEnd != null) onDragEnd(gameObject); }  
  46.     public void OnDrop(PointerEventData eventData) { if (onDrop != null) onDrop(gameObject); }  
  47.     public void OnScroll(PointerEventData eventData) { if (onScroll != null) onScroll(gameObject); }  
  48.     public void OnMove(AxisEventData eventData) { if (onMove != null) onMove(gameObject); }  
  49.   
  50.     static public UUIEventListener Get(GameObject go)  
  51.     {  
  52.         UUIEventListener listener = go.GetComponent();  
  53.         if (listener == null) listener = go.AddComponent();  
  54.         return listener;  
  55.     }  
  56. }  

使用方式:

  1. UUIEventListener.Get(btn.gameObject).onClick = OnClickBtn;     
  2. UUIEventListener.Get(btn.gameObject).parameter = index;     
  3.       
  4. private void OnClickBtn(GameObject go)     
  5. {     
  6.     int index = (int)UUIEventListener.Get(go).parameter;     
  7.     Debug.Log("您单击的索引为:" + index);     
  8. } 
Unity中的UI系统之UGUI UGUI是什么UGUI是Unity引擎内自带的UI系统官方称之为:Unity UI是目前Unity商业游戏开发中使用最广泛的UI系统开发解决方案它是基于Unity游戏对象的UI系统,只能用来做游戏UI功能不能用于开发Unity编辑器中内置的用户界面如何在Unity中使用UGUI直接在Hierarchy窗口中右键选择UIUI中所有内容都是UGUI相关控件六大基础组件1、Canvas对象上依附的:①Canvas:画布组件,主要用于渲染UI控件②。 阅读详情

相关推荐

Unity中UGUI事件系统(一)

实现接口IPointerClickHandler(鼠标点击)、IPointerEnterHandler(鼠标进入)、IPointerExitHandler(鼠标移出)、IPointerDownHandler(鼠标按下)、IPointerUpHandler(鼠标松开)、UIEventClick脚本挂载到需要点击的UI上。1. 添加UIEventSelect脚本,该脚本实现了ISelectHandler(选定),IUpdateSelectedHandler(选中),IDeselectHandler(未选中)。

Umbella的博客 2260

【Unity游戏开发】你真的了解UGUI中的IPointerClickHandler吗?

一、引子   马三在最近的开发工作中遇到了一个比较有意思的bug:“TableViewCell上面的某些自定义UI组件不能响应点击事件,并且它的父容器TableView也不能响应点击事件,但是TableViewCell上面的Button等组件却可以接受点击事件,并且如果单独把自定义UI控件放在一个UI上面也可以接受点击事件”。最后马三通过仔细地分析,发现是某些自定义的UI组件实现方法的问题。通常...

weixin_30672019的博客 1013

【Unity3D UGUI】事件接口(零)总述

Unity3D UGUI 事件接口系列之总述。

Eazey丶亦泽 6480

刨根系列 之 Unity3D UGUI 背后的工作原理

目录 前言 1. 处理玩家输入 EventSystem的作用 2.封装处理结果 3.传递包装好的数据(BaseEventData) 4.响应玩家输入 前言 在Unity场景中创建一个Canvas,可以发现,编辑器自动为我们创建了一个叫EventSystem的东西,我们可以发现这个EventSystem中默认包含两个组件:EventSystem和StandaloneInputModule,你可能想知道这两个东西是干啥的?没有它们不行么?它们工作的原理是什么?为什么点击一个...

zhaocg00的专栏 3073

UGUI的事件机制

UGUI使用了新的event机制,我们之前在NGUI中,为了处理ui的交互,通常是在ui组件挂载的mono上写onclick(),onpress()这些函数,换到ugui后,unity使用了新的event 机制。但是unity的文档解释的很乱,这里整理一下。

leon 5751

UGUI鼠标悬停事件

一开始我想用OnMouseOver方法,但是它只适用于GUI和非UI物体,对于UGUI无效。 方法1 在Update函数里用射线检测 具体见博客:https://www.cnblogs.com/yanghui0702/p/yanghui20181018.html 方法2 使用EventTrigger组件 我使用的unity版本为5.6,高版本不一定适用。 UGUI物体有个组件叫EventTrigg...

realfancy的博客 6364

UGUI源码解析——总览

一:图像相关 ——UIBehaviour:UGUI源码解析——UIBehaviour UI组件的基类,负责接收一些事件 ——CanvasUpdateRegistry、ICanvasElement:UGUI源码解析——CanvasUpdateRegistry 监听画布的布局、网格、材质的更新 ——LayoutRebuilder: ——Graphic: 显示相关的基类 ——MaskableGraphic: ——IMaskable: ——ICliappable: ——IMaterialModifier:

L的博客 7329

UGUI源码分析:系统总结UGUI的全部内容

序言 嗨,我是Vin129,一名Unity客户端游戏开发者。UGUI应该算Unity客户端开发者们经常接触的东西了,所以该系列文章主旨在于加深对UGUI的了解,深入理解其组件实现原理,以便在日常使用中更加得心应手。其次,多读读源码也是一种成长:) 本系列文章到此已经完结啦!历时一个半月的时间,花费了30+个小时,Markdown记录了17000+内容(有许多代码),这仅仅是自己使用的部分。发布文章,在润色整理并能很好的呈现出来重要的东西,反复推敲,我觉得这上面可能花费的时间要更多。不过分享文章这也是我的初

vin129的博客 3482

Unity之UGUI详解

UGUI 文章目录UGUI六大基础组件概述Canvas对象上依附的:CanvasCanvas ScalerGraphic RaycasterRectTransformEventSystem对象上依附的:EventSystemStandalone Input ModuleCanvas画布组件Screen Space overlayScreen Space CameraWorld SpaceCanvasScaler画布缩放控制器组件学前准备:Constant Pixel Size恒定像素模式Scale With

BraveRunTo的博客 3万+

UGUI事件传递流程解析

很多Unity3D项目都使用了UGUI,但并不是所有人都研究过它的内部结构。针对事件的传递过程,会问住大多数未深入思考过的开发者。由于UGUI是开源的,我们可以通过查看源码来熟悉它的原理,它的地址在可以找到。 事件体系 首先要说明,事件体系的基础是设计模式中的观察者模式,因此按照标准的Subject和Observer来解读没有任何问题。但在这里,我更希望以功能为导向,将事件体系划分成更易于...

阿修罗道 3497

Unity 之 UGUI EventSystem事件系统详解

在UGUI中,其根容器为Canvas,我们发现无论添加任何UI到场景中,都会默认生成Canvas以及EventSystem。 使用事件系统可以根据输入(即键盘、鼠标、触摸或自定义输入)将事件发送到应用程序中的对象。事件系统包含一些共同协作以发送事件的组件。

陈言必行 -- Unity游戏开发领域优质博主 1万+

ugui封装事件

使用ugui的事件特别不方便,因为使用ngui的时候直接用eventdelegate添加就行,但是ugui没有类似的东西,所以自己在项目中封装了一个uievent类,使用方式和ngui的方式一样,直接用uievent.AddListener就行,特别方面,有需要的朋友可以参考一下!有错之处还请朋友们指正! public class UIEvent : EventTrigger { /需要其他事件可...

HarvestHarvest的博客 429

UGUI组件封装

参考博客 https://blog.youkuaiyun.com/qq_37310110/article/details/89149420

UGUI点击事件的简单封装

UGUI点击事件的简单封装IPointerEnterHandler – OnPointerEnter – Called when a pointer enters the object IPointerExitHandler – OnPointerExit – Called when a pointer exits the object IPointerDownHandler – OnPoint

qq_33927832的博客 748

Cocos Creator3.5.2使用Spine切换皮肤

3、然后获取当前spine中是否有皮肤数据,如果spine连皮肤数据都没有,接着写可能会error,这里的 skins[skin],是判断皮肤列表中是否有需要更换的皮肤。2、因为spine往往意味着异步加载,换肤时也经常出现频繁异步的情况,所以下一步我们要可以判断当前spine组件里是否已经加载好了spine文件。换肤前隐藏好需要换肤的节点,避免穿帮;官网文档的换肤流程太简化,对于实际使用来说会有各种各样的问题。1、首先获取对应的spine组件。这里的skin自然是外部传入的需要换肤的皮肤名。

tc654321的博客 1817

CMOS反相器版图设计全解析:PMOS/NMOS布局与VDD/VSS连接门道

版图设计是芯片从电路原理图迈向物理实现的必经桥梁,而CMOS反相器作为最基础的数字单元,恰好是理解这一过程的最佳切入点。在版图绘制中,PMOS与NMOS因导电类型和迁移率差异,需要在N阱与P衬底上分别规划,并呈现出不同的有源区尺寸。真正决定版图好坏的关键,往往在于VDD/VSS的完整连接——不仅要接通源漏,还要通过阱接触和衬底接触固定阱与衬底电位,防止寄生PN结正偏和闩锁效应。合理布局电源地线轨道、优化接触孔数量,能显著降低寄生电阻与电迁移风险。这些原理不仅适用于反相器,也是所有CMOS数字标准单元版图设计

weixin_29159441的博客 300
上一篇: RigidbodyFPSController
下一篇: Unity 查看所有GUI默认样式 GUI.Skin
hypercube2
博客等级 码龄18年 23粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值