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

【接口介绍】

命名空间:using UnityEngine.EventSystems;

IPointerEnterHandler

该接口实现方法如下:

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

IPointerExitHandler

该接口实现方法如下:

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

IPointerDownHandler

该接口实现方法如下:

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

IPointerUpHandler

该接口实现方法如下:

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

IPointerClickHandler

该接口实现方法如下:

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

IDragHandler

该接口实现方法如下:

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

IInitializePotentialDragHandler

该接口实现方法如下:

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

IBeginDragHandler

该接口实现方法如下:

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

IEndDragHandler

该接口实现方法如下:

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

IDropHandler

该接口实现方法如下:

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

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. jQuery里ready方法用原生js实现原理

    function ready(fn){ if(document.addEventListener){ //标准浏览器 document.addEventListener('DOMContentLoad ...

  2. 【转载】python中math模块常用的方法

    转自:https://www.cnblogs.com/renpingsheng/p/7171950.html ceil #取大于等于x的最小的整数值,如果x是一个整数,则返回x ceil(x) Ret ...

  3. 阿里云负载均衡-note

    公网负载均衡实例 公网类型的负载均衡实例可以通过Internet将客户端请求按照您制定的监听规则分发到添加的后端服务器ECS上. 在您创建公网负载均衡实例后,系统会为其分配一个公网服务地址,您可以将您 ...

  4. 一看就会一做就废系列:说说 RECOVER UNTIL CANCEL

    这里是:一看就会,一做就废系列 数据库演示版本为 19.3 (12.2.0.3) 该系列涉及恢复过程中使用的 5 个语句: 1. recover database 2. recover databas ...

  5. jquery validate验证插件扩展方法(转)

    /***************************************************************** jQuery Validate扩展验证方法 (linjq) *** ...

  6. Apache-Tomcat-Ajp漏洞(CVE-2020-1938)漏洞复现(含有poc)

    Apache-Tomcat-Ajp漏洞(CVE-2020-1938)漏洞复现 0X00漏洞简介 Apache与Tomcat都是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可 ...

  7. DE1-soc软件实验”hello_word"

    此实验需要工具:win32disk,路由器,sd卡,Embeed Design suite, Putty,usb to uart 驱动 选择文件,在拷贝到sd卡中去:烧写的文件是官方提供的SD卡的程序 ...

  8. Python与C语言基础对比(Python快速入门)

    代码较长,建议使用电脑阅读本文. 10分钟入门Python 本文中使用的是Python3 如果你曾经学过C语言,阅读此文,相信你能迅速发现这两种语言的异同,达到快速入门的目的.下面将开始介绍它们的异同 ...

  9. 2.7.2 元素定位:frame 内定位 driver.switch_to.frame()

    来源: http://blog.csdn.net/anniejunyan/article/details/23257327  Selenium + Webdriver 学习(五) frame下元素定位 ...

  10. Java 读取网络资源文件 获取文件大小 MD5校验值

    Java 读取网络资源文件 获取文件大小 MD5校验值 封装一个文件操作工具类: package c; import java.io.*; import java.net.HttpURLConnect ...