UGUI 系统虽然提供了很多封装好的组件,但是要实现一些特定的功能还是显得非常有限,这时候就需要使用事件接口来完成UI功能的实现。比如我们想实现鼠标移动到图片上时自动显示图片的文字介绍,一般思路会想到写个射线来检测,但其实这样的检测UGUI已经替我们完成了,我们只需要实现检测到目标对象后所要执行的代码即可!
  UI 组件都是基于 UGUI 封装好的类和接口以及一些 Editor 文件来进行封装制作供开发者使用的,开发者利用这些封装好的工具,只需更专注于功能开发即可。UGUI 的代码是开源的,开发者可以查阅 UGUI 系统的具体细节来进行更深入的学习。UGUI 源码传送门:Unity-Technologies/UI
  Unity官方也为开发者提供了很多完整的案例,可以在 Assets Store上进行下载,搜索“Unity Samples: UI”。

【接口介绍】

命名空间:using UnityEngine.EventSystems;

IPointerEnterHandler

该接口实现方法如下:

  1. public void OnPointerEnter(PointerEventData eventData)
  2. {
  3. //当鼠标光标移入该对象时触发
  4. }

IPointerExitHandler

该接口实现方法如下:

  1. public void OnPointerExit(PointerEventData eventData)
  2. {
  3. //当鼠标光标移出该对象时触发
  4. }

IPointerDownHandler

该接口实现方法如下:

  1. public void OnPointerDown(PointerEventData eventData)
  2. {
  3. //鼠标点击A对象,按下鼠标时A对象响应此事件
  4. }

IPointerUpHandler

该接口实现方法如下:

  1. public void OnPointerUp(PointerEventData eventData)
  2. {
  3. //鼠标点击A对象,抬起鼠标时响应
  4. //无论鼠标在何处抬起(即不在A对象中)
  5. //都会在A对象中响应此事件
  6. //注:响应此事件的前提是A对象必须响应过OnPointerDown事件
  7. Debug.Log("OnPointerUp " + name);
  8. }

IPointerClickHandler

该接口实现方法如下:

  1. public void OnPointerClick(PointerEventData eventData)
  2. {
  3. //鼠标点击A对象,抬起鼠标时A对象响应此事件
  4. //注:按下和抬起时鼠标要处于同一对象上
  5. }

IDragHandler

该接口实现方法如下:

  1. public void OnDrag(PointerEventData eventData)
  2. {
  3. //当鼠标在A对象按下并拖拽时 A对象每帧响应一次此事件
  4. //注:如果不实现此接口,则后面的四个接口方法都不会触发
  5. Debug.Log("OnDrag " + name);
  6.  
  7. if (Input.GetMouseButton())
  8. {
  9. //拖拽移动图片
  10. SetDraggedPosition(eventData);
  11. }
  12. }
  13. private void SetDraggedPosition(PointerEventData eventData)
  14. {
  15. var rt = gameObject.GetComponent<RectTransform>();
  16. Vector3 globalMousePos;
  17. if(RectTransformUtility.ScreenPointToWorldPointInRectangle(rt,eventData.position, eventData.pressEventCamera, out globalMousePos))
  18. {
  19. rt.position = globalMousePos;
  20. }
  21. }

IInitializePotentialDragHandler

该接口实现方法如下:

  1. public void OnInitializePotentialDrag(PointerEventData eventData)
  2. {
  3. //当鼠标在A对象按下还没开始拖拽时 A对象响应此事件
  4. //注:此接口事件与IPointerDownHandler接口事件类似
  5. // 二者的执行顺序:先执行IPointerDownHandler,然后执行此接口事件
  6. Debug.Log("OnInitializePotentialDrag " + name);
  7. }

IBeginDragHandler

该接口实现方法如下:

  1. public void OnBeginDrag(PointerEventData eventData)
  2. {
  3. //当鼠标在A对象按下并开始拖拽时 A对象响应此事件
  4. // 此事件在OnInitializePotentialDrag之后响应 OnDrag之前响应
  5. Debug.Log("OnBeginDrag " + name);
  6. }

IEndDragHandler

该接口实现方法如下:

  1. public void OnEndDrag(PointerEventData eventData)
  2. {
  3. //当鼠标抬起时 A对象响应此事件
  4. Debug.Log("OnEndDrag " + name);
  5. }

IDropHandler

该接口实现方法如下:

  1. public void OnDrop(PointerEventData eventData)
  2. {
  3. //A、B对象必须均实现IDropHandler接口,且A至少实现IDragHandler接口
  4. //当鼠标从A对象上开始拖拽,在B对象上抬起时 B对象响应此事件
  5. //此时name获取到的是B对象的name属性
  6. //eventData.pointerDrag表示发起拖拽的对象(GameObject)
  7. Debug.Log(eventData.pointerDrag.name + " OnDrop to " + name);
  8. }

Unity UGUI事件接口概述的更多相关文章

  1. Unity3D学习笔记(二十二):ScrollView和事件接口

    昨天问题 InputField光标被遮挡问题:背景图片输入层级高于光标的层级,把光标弄成子物体,子物体层级高 自制的滑动框,选项怎么对齐,把Template的Pivot.y改为1 分辨率的区别:16: ...

  2. UGUI 事件穿透规则

    UGUI事件分为两大类:点击和拖拽. 点击包括 pointerdown, pointerup. 拖拽包括 begindrag, drag, enddrag. 点击事件无穿透:只会被最上层UI响应,不会 ...

  3. Unity UGUI鼠标穿透UI问题(Unity官方的解决方法)

    简述 最近在用UGUI的时候遇到了鼠标穿透的问题,就是说在UGUI和3D场景混合的情况下,点击UI区域同时也会 触发3D中物体的鼠标事件.比如下图中 这里给Cube加了一个鼠标点击改变颜色的代码,如下 ...

  4. unity UI事件

    由于工作需要到持续按键,所以了解了一下unity UI事件,本文主要转载于http://www.cnblogs.com/zou90512/p/3995932.html?utm_source=tuico ...

  5. AS3事件机制概述

    事件机制是AS3的核心功能之一,没有充分掌握事件机制的方方面面,就不能算是精通AS3语言. 1. AS3事件机制的主要成员 IEventDispatcher:事件派发对象接口,定义了添加.派发.移除. ...

  6. Unity UGUI —— 无限循环List

    还记得大学毕业刚工作的时候是做flash的开发,那时候看到别人写的各种各样的UI组件就非常佩服,后来自己也慢慢尝试着写,发现其实也就那么回事.UI的开发其实技术的成分相对来说不算多,但是一个好的UI是 ...

  7. Unity UGUI图文混排源码(三) -- 动态表情

    这里是根据图文混排源码(二)进一步修改的,其他链接也不贴了,就贴一个链接就好了,第一次看这文章的同学可以先去看看其他几篇文章 Unity UGUI图文混排源码(二):http://blog.csdn. ...

  8. Unity UGUI图文混排源码(二)

    Unity UGUI图文混排源码(一):http://blog.csdn.net/qq992817263/article/details/51112304 Unity UGUI图文混排源码(二):ht ...

  9. Unity UGUI图文混排源码(一)

    Unity UGUI图文混排源码(一):http://blog.csdn.net/qq992817263/article/details/51112304 Unity UGUI图文混排源码(二):ht ...

随机推荐

  1. 主从分离之SSM与Mysql

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  2. SpringMVC-简单参数绑定

    SpringMVC-简单参数绑定    众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在 ...

  3. <if test="type == '0' ">没有进去这个判断的问题

    在MyBatis的mapp文件中的if判断中是这样写的 <if test="type == '0' "> and so1.id = #{unitcode} </i ...

  4. 白面系列 nginx

    Nginx == engine x. nginx就是一个服务器.主要提供web服务.负载均衡(反向代理).web缓存等服务. nginx ≈ apache,但nginx是轻量级的高性能高并发的服务器. ...

  5. Java基础面试题总结二

    1,什么是字符串常量池? 字符串的分配,和其他的对象分配一样,耗费高昂的时间与空间代价.JVM为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化.为 了减少在JVM中创建的字符串的数量 ...

  6. arm-linux下qt + opencv开发环境的搭建(Altera DE1 Soc)

    arm-linux-gnueabihf-gcc下载 qt下载 arm-linux下qt + opencv开发环境的搭建(Altera DE1 Soc) Ubuntu 16.04 安装QT arm嵌入式 ...

  7. Codeforces Round #601 (Div. 2) E1 Send Boxes to Alice (Easy Version)

    #include <bits/stdc++.h> using namespace std; typedef long long ll; ; int a[N]; int n; bool pr ...

  8. 题解【BZOJ4472】[JSOI2015]salesman

    题面 树形\(\text{DP}\)与贪心的结合. 首先考虑树形\(\text{DP}\). 设\(dp_i\)表示从\(i\)出发,访问\(i\)的子树,并且最后回到\(i\)能获得的最大收益. 转 ...

  9. centos7使用jenkins启动找不到模块

    问题: 在jenkins上启动pycharm项目报:ModuleNotFoundError: No module named 'wanwenyc' 其中‘wanwenyc’为pycharm工程项目路径 ...

  10. Echarts--来自官网

    引入 ECharts ECharts 3 开始不再强制使用 AMD 的方式按需引入,代码里也不再内置 AMD 加载器.因此引入方式简单了很多,只需要像普通的 JavaScript 库一样用 scrip ...