1 简述

​ UGUI 回调函数主要指鼠标进入、离开、点下、点击中、抬起、开始拖拽、拖拽中、拖拽结束 UI 控件触发的回调。使用 UGUI 回调函数时,需要引入 UnityEngine.EventSystems 命名空间。

1) 回调函数

回调函数 接口 说明
void OnPointerEnter(PointerEventData eventData) IPointerEnterHandler 鼠标进入
void OnPointerExit(PointerEventData eventData) IPointerExitHandler 鼠标离开
void OnPointerDown(PointerEventData eventData) IPointerDownHandler 鼠标点下
void OnPointerUp(PointerEventData eventData) IPointerUpHandler 鼠标抬起
void OnPointerClick(PointerEventData eventData) IPointerClickHandler 鼠标单击
void OnBeginDrag(PointerEventData eventData) IBeginDragHandler 鼠标开始拖拽
void OnDrag(PointerEventData eventData) IDragHandler 鼠标拖拽中
void OnEndDrag(PointerEventData eventData) IEndDragHandler 鼠标结束拖拽

​ 注意:OnPointerClick 方法在 OnPointerUp 方法之后执行;如果在拖拽过程中停下了,但是鼠标左键仍未抬起,OnDrag 方法不会执行。

2)前提条件

  • 当前 UI 对象必须至少有 1 个基础组件(Text、Image、RawImage)
  • 基础 UI 组件中必须勾选 Raycast Target
  • 代码引入 UnityEngine.EventSystems 命名空间

3)使用方法

using UnityEngine;
using UnityEngine.EventSystems; public class EventController : MonoBehaviour,
IPointerEnterHandler,
IPointerExitHandler,
IPointerDownHandler,
IPointerClickHandler,
IPointerUpHandler,
IBeginDragHandler,
IDragHandler,
IEndDragHandler { public void OnPointerEnter(PointerEventData eventData) {
Debug.Log("OnPointerEnter");
} public void OnPointerExit(PointerEventData eventData) {
Debug.Log("OnPointerExit");
} public void OnPointerDown(PointerEventData eventData) {
Debug.Log("OnPointerDown");
} public void OnPointerClick(PointerEventData eventData) {
Debug.Log("OnPointerClick");
} public void OnPointerUp(PointerEventData eventData) {
Debug.Log("OnPointerUp");
} public void OnBeginDrag(PointerEventData eventData) {
Debug.Log("OnBeginDrag");
} public void OnDrag(PointerEventData eventData) {
Debug.Log("OnDrag");
} public void OnEndDrag(PointerEventData eventData) {
Debug.Log("OnEndDrag");
}
}

2 应用

1)UGUI 控件

​ 分别创建 Panel 和 2 个 Image 控件,并将 Image 控件重命名为 Monster 和 Spear,如下:

​ 给 Monster 和 Spear 添加 Sprite 图片如下:

2)脚本组件

​ SpearController.cs

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems; public class SpearController : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler {
private bool isDragging = false; public void OnBeginDrag(PointerEventData eventData) {
GetComponent<Image>().raycastTarget = false;
isDragging = true;
} public void OnDrag(PointerEventData eventData) {
Drag1();
// Drag2();
} public void OnEndDrag(PointerEventData eventData) {
GetComponent<Image>().raycastTarget = true;
isDragging = false;
} public bool IsDragging() {
return isDragging;
} private void Drag1() { // Canvas 渲染模式为 Screen Space - Overlay
transform.position = Input.mousePosition;
} private void Drag2() { // Canvas 渲染模式为 Screen Space - Camera
Vector3 worldPostion = Vector3.zero;
RectTransformUtility.ScreenPointToWorldPointInRectangle(
transform.root as RectTransform,
Input.mousePosition,
Camera.main,
out worldPostion
);
transform.position = worldPostion;
}
}

​ 说明:SpearController 脚本组件附着在 Spear 对象上。

​ MonsterController.cs

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems; public class MonsterController : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler {
private Image image;
private SpearController spear; private void Start() {
image = GetComponent<Image>();
spear = GameObject.Find("Spear").GetComponent<SpearController>();
} public void OnPointerEnter(PointerEventData eventData) {
if (spear.IsDragging()) {
image.color = Color.red;
}
} public void OnPointerExit(PointerEventData eventData) {
if (spear.IsDragging()) {
image.color = Color.white;
}
}
}

​ 说明:MonsterController 脚本组件附着在 Monster 对象上。

3)运行效果

​ 声明:本文转自【Unity3D】UGUI回调函数

【Unity3D】UGUI回调函数的更多相关文章

  1. Unity3d UGUI 通用Confirm确认对话框实现(Inventory Pro学习总结)

    背景 曾几何时,在Winform中,使用MessageBox对话框是如此happy,后来还有人封装了可以选择各种图标和带隐藏详情的MessageBox,现在Unity3d UGui就没有了这样的好事情 ...

  2. Unity 之 C# 利用回调函数实现C++匿名函数

    做C++开发的都用过匿名函数很好用,可是C#开发怎么实现呢?前几天做一个拍照功能的时候.我偶然发现某个函数假设是C++的话.用匿名函数太好了,于是開始研究C#的回调,代理.托付等,最后总算是实现了我想 ...

  3. 小兔JS教程(三)-- 彻底攻略JS回调函数

    这一讲来谈谈回调函数. 其实一句话就能概括这个东西: 回调函数就是把一个函数当做参数,传入另一个函数中.传进去的目的仅仅是为了在某个时刻去执行它. 如果不执行,那么你传一个函数进去干嘛呢? 就比如说对 ...

  4. 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比

    C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...

  5. 嵌入式&iOS:回调函数(C)与block(OC)回调对比

    学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下. C的回调函数: callBack.h 1).定义一个回调函数的参数数量.类型. typedef void (*CallBack ...

  6. 理解 JavaScript 回调函数并使用

    JavaScript中,函数是一等(first-class)对象:也就是说,函数是 Object 类型并且可以像其他一等对象(String,Array,Number等)一样使用.它们可以"保 ...

  7. 关于js的回调函数的一点看法

    算了一下又有好几个月没写博客了,最近在忙公司android的项目,所以也就很少抽时间来写些东西了.刚闲下来,我就翻了翻之前看的东西.做了android之后更加感觉到手机端开发的重要性,现在做nativ ...

  8. JS学习:第二周——NO.1回调函数

    [回调函数] 定义:把一个函数的定义阶段,作为参数,传给另一个函数: 回调函数调用次数,取决于条件: 回调函数可以传参: 回调函数可以给变this指向,默认是window: 回调函数没有返回值,for ...

  9. 【java回调】java两个类之间的回调函数传递

    背景交代:熟悉用js开发的cordovaAPP:对java一窍不通的我,老师让做一个监测用户拍照事件的功能,无奈没有找到现成的库,无奈自己动手开发java插件~~0基础java GreenHand,祝 ...

  10. Java|今天起,别再扯订阅和回调函数

    编程史上有两个令人匪夷所思的说辞,一个是订阅,一个是回调函数. 我想应该还有很多同学为“事件的订阅”和“回调函数”所困扰,因为事情本来就不应该按这个套路来解释. 多直白,所谓的“回调函数”你完全可以线 ...

随机推荐

  1. ORA-01017: 用户名/密码无效;登录被拒绝

    总结 出现此错误的原因有多种: 您的用户名或密码实际上不正确 数据库配置不正确(tnanames.ora. $ORACLE_SID 参数) 现在,我们来看看这个错误的解决方案. ORA-01017 解 ...

  2. PC 网页 布局图

  3. 汉字在unicode的编码情况-From http://yedict.com/zsts.htm

    字符集内容 字数 unicode编码 字符显示说明(除非安装更大字库) 基本区  分页:  一 二 三 四 共20902字 4E00-9FA5 电脑和手机都能显示 基本区补充 共90字 9FA6-9F ...

  4. [转帖]Redis中的Lua脚本

    最近琢磨分布式锁时接触到的知识点,简单记一下. 文章目录 1. Redis中的Lua 2. 利用Lua操作Redis 3. Lua脚本的原子性 4. 关于 EVALSHA 5. 常用`SCRIPT` ...

  5. [转帖]Linux开发环境——SCL软件集

    一.SCL简介 1.SCL简介 SCL(Software Collections)是一个CentOS/RHEL Linux平台的软件多版本共存解决方案,为RHEL/CentOS  Linux用户提供一 ...

  6. 慢SQL的致胜法宝

    大促备战,最大的隐患项之一就是慢SQL,对于服务平稳运行带来的破坏性最大,也是日常工作中经常带来整个应用抖动的最大隐患,在日常开发中如何避免出现慢SQL,出现了慢SQL应该按照什么思路去解决是我们必须 ...

  7. Spring Boot Admin极简教程

    一.简介 Spring Boot Admin是一个完整的应用程序,用于监控和管理Spring Boot应用.原理是通过调用Spring Boot Actuator提供的http接口来实现的监控和管理, ...

  8. http 中使用 gzip 输出内容时,如何预先压缩前一半页面?

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 背景是这样:要输出一个很大的动态页面,不开 gzip 压缩 ...

  9. 【笔记】VictoriaMetrics中,对大量的pull模式的targets进行分片

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 配置的方法请看这里:https://docs.victor ...

  10. 【K哥爬虫普法】大数据风控第一案:从魔蝎科技案件判决,看爬虫技术刑事边界

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...