Unity之UGUI鼠标进入离开&&拖拽实现

前言:

__小黑最近在写项目的时候就有个疑惑,UGUI中的Button组件,他的点击事件是怎么实现的!?我们自己能不能写一个!?之后在项目中使用自己写出来的Button组件,是不是会超级开心,超级有成就感呢?!!
赶巧正好手中有项目需要:鼠标进入Image之后,出现不同的效果 + 信息的更新,然后上网一查发现Unity有接口可以直接实现,那这不是美滋滋么?!

实现接口

一、鼠标进入&&离开

这一听小伙伴们就知道是两个可实现接口了

1:IPointerEnterHandler

2:IPointerExitHandler

直接给大家上代码,希望客官逛过之后点赞哟~~~

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using UnityEngine.EventSystems;
  6. public class EntryorExitUI : MonoBehaviour , IPointerEnterHandler , IPointerExitHandler
  7. {
  8. /// <summary>
  9. /// 当鼠标进入UI后执行的事件执行的
  10. /// </summary>
  11. public void OnPointerEnter(PointerEventData eventData)
  12. {
  13. Debug.Log("鼠标已经进入,请开始你的表演");
  14. }
  15. /// <summary>
  16. /// 当鼠标离开UI后执行的事件执行的
  17. /// </summary>
  18. public void OnPointerExit(PointerEventData eventData)
  19. {
  20. Debug.Log("鼠标已经离开,你的表演结束了!");
  21. }
  22. }

二、拖拽

三个可实现接口

1:IDragHandler

2:IBeginDragHandler

3:IEndDragHandler

  1. 提醒:小黑亲身试坑的结果:那就是一定要实现IDragHandler,然后实现IBeginDragHandlerIEndDragHandler
  2. !!!!深坑!!!! 一定要记住,一定要实现IDragHandler

老规矩,直接给大家上代码!分享出来的知识有没有被小伙伴get到,还有好不好用,就看客官给小黑点不点赞了!

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using UnityEngine.EventSystems;
  6. public class DragUI : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
  7. {
  8. private Vector3 offset; //存储按下鼠标时的图片-鼠标位置差
  9. private Vector3 arragedPos; //保存经过整理后的向量,用于图片移动
  10. /// <summary>
  11. /// 开始拖拽起始
  12. /// </summary>
  13. public void OnBeginDrag(PointerEventData eventData)
  14. {
  15. if (RectTransformUtility.ScreenPointToWorldPointInRectangle(transform.GetComponent<RectTransform>(), Input.mousePosition
  16. , eventData.enterEventCamera, out arragedPos))
  17. {
  18. offset = transform.position - arragedPos;
  19. }
  20. }
  21. /// <summary>
  22. /// 拖拽中
  23. /// </summary>
  24. public void OnDrag(PointerEventData eventData)
  25. {
  26. transform.position = offset + Input.mousePosition;
  27. }
  28. /// <summary>
  29. /// 拖拽结束
  30. /// </summary>
  31. public void OnEndDrag(PointerEventData eventData)
  32. {
  33. transform.position = transform.parent.transform.position;
  34. }
  35. }

三、合并

都合并了,当然是上面的5个接口啦

客官们,原小黑的懒好吧!脚本名字直接用拖拽的了

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using UnityEngine.EventSystems;
  6. public class DragUI : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler, IPointerExitHandler, IPointerEnterHandler
  7. {
  8. private Image thisimg;
  9. private Vector3 offset; //存储按下鼠标时的图片-鼠标位置差
  10. private Vector3 arragedPos; //保存经过整理后的向量,用于图片移动
  11. /// <summary>
  12. /// 开始拖拽起始
  13. /// </summary>
  14. public void OnBeginDrag(PointerEventData eventData)
  15. {
  16. if (RectTransformUtility.ScreenPointToWorldPointInRectangle(transform.GetComponent<RectTransform>(), Input.mousePosition
  17. , eventData.enterEventCamera, out arragedPos))
  18. {
  19. offset = transform.position - arragedPos;
  20. }
  21. }
  22. /// <summary>
  23. /// 拖拽中
  24. /// </summary>
  25. public void OnDrag(PointerEventData eventData)
  26. {
  27. transform.position = offset + Input.mousePosition;
  28. }
  29. /// <summary>
  30. /// 拖拽结束
  31. /// </summary>
  32. public void OnEndDrag(PointerEventData eventData)
  33. {
  34. transform.position = transform.parent.transform.position;
  35. }
  36. /// <summary>
  37. /// 当鼠标进入UI后执行的事件执行的
  38. /// </summary>
  39. public void OnPointerEnter(PointerEventData eventData)
  40. {
  41. Debug.Log("鼠标已经进入,请开始你的表演");
  42. }
  43. /// <summary>
  44. /// 当鼠标离开UI后执行的事件执行的
  45. /// </summary>
  46. public void OnPointerExit(PointerEventData eventData)
  47. {
  48. Debug.Log("鼠标已经离开,你的表演结束了!");
  49. }
  50. }

四、结语

总之呢,小黑还是没有找到如何自己去编写Button组件,这个东西容我有时间了慢慢研究,不过这个鼠标进入离开 + 拖拽还挺好用的不是么,那么客官您是不是该给小黑 点个赞呐!

接下来还是我们的知识分享环节!

今日分享完毕!

程序的道路上学习永不停止,探索随时进行。
Let’s go. Just do it. We can.

还是来自**小黑**的祝福:祝小伙伴们国庆节快乐,技术多多长进,你们会了来给小黑讲解?

接着祝我们华锐视点生意兴隆,财源滚滚,越来越好?!不得不说我们老板超级Nice!21号吃的螃蟹宴,别提多爽了?

Unity之UGUI鼠标进入离开&&拖拽实现的更多相关文章

  1. CSharpGL(21)用鼠标拾取、拖拽VBO图元内的点、线或本身

    CSharpGL(21)用鼠标拾取.拖拽VBO图元内的点.线或本身 效果图 以最常见的三角形网格(用GL_TRIANGLES方式进行渲染)为例. 在拾取模式为GeometryType.Point时,你 ...

  2. 前端笔记之JavaScript(十一)event&BOM&鼠标/盒子位置&拖拽/滚轮

    一.事件对象event 1.1 preventdefault()和returnValue阻止默认事件 通知浏览器不要执行与事件关联的默认动作. preventdefault()  支持Chrome等高 ...

  3. 超强的纯 CSS 鼠标点击拖拽效果

    背景 鼠标拖拽元素移动,算是一个稍微有点点复杂的交互. 而在本文,我们就将打破常规,向大家介绍一种超强的仅仅使用纯 CSS 就能够实现的鼠标点击拖拽效果. 在之前的这篇文章中 -- 不可思议的纯 CS ...

  4. HTML5深入学习之鼠标跟随,拖拽事件

    知识点(鼠标跟随): mousedown: 当用户用鼠标点击在某一元素上就会触发该事件 mouseover:  当鼠标指针在某一元素上移动就会触发改事件 下面这个例子的效果就是鼠标点击元素后,元素跟着 ...

  5. wpf图片查看器,支持鼠标滚动缩放拖拽

    最近项目需要,要用到一个图片查看器,类似于windows自带的图片查看器那样,鼠标滚动可以缩放,可以拖拽图片,于是就写了这个简单的图片查看器. 前台代码: <Window x:Class=&qu ...

  6. JAVA鼠标屏幕绘制拖拽删除矩形

    import java.awt.Cursor; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; ...

  7. 原生js及H5模拟鼠标点击拖拽

    一.原生js 1.拖拽的流程动作 鼠标按下 触发onmousedown事件 鼠标移动 触发onmousemove事件 鼠标松开 触发onmouseup事件 2.注意事项: 要防止div移出可视框,要限 ...

  8. 我的Windows日常——鼠标无法进行拖拽的解决方法

    方法1: 鼠标右键单击任务栏 选择属性,进入任务栏和开始菜单属性 点击「开始」菜单  进入分页,单击自定义 找到并勾选启用上下文菜单和拖放 一路确定.... --------------------- ...

  9. Unity中UGUI鼠标穿透UI问题的解决方法

    不过在使用时需要先获取两个红色显示的变量,graphicRaycaster和eventSystem. 这两个变量分别对应的是Canvas中的GraphicRaycaster组件和创建UI时自动生成的“ ...

随机推荐

  1. vue-项目的整体增删改查

    Dept: package com.example.demo.gs; public class Dept { private int id; private String name; private ...

  2. mitmproxy抓包工具

    中文官网 https://ptorch.com/docs/10/mitmproxy-concepts-options mitmproxy抓包工具 1. mitmproxy 介绍与安装 需要安装pyth ...

  3. 第2-1-1章 FastDFS分布式文件服务背景及系统架构介绍

    目录 1 背景 1.1 为什么需要分布式文件服务 1.1.1 单机时代 1.1.2 独立文件服务器 1.1.3 分布式文件系统 1.2 什么是FastDFS 2 系统架构 2.1 Tracker集群 ...

  4. AK/SK加密认证

    AK/SK认证的实现 AK/SK概述 1.什么是AKSK ak/sk是一种身份认证方式,常用于系统间接口调用时的身份验证,其中ak为Access Key ID,sk为Secret Access Key ...

  5. ROS应用层通信协议解析

    参考:http://wiki.ros.org/ROS/Master_API http://wiki.ros.org/ROS/Connection Header 说明 ROS本质上就是一个松耦合的通信框 ...

  6. 同步与异步、阻塞与非阻塞、创建进程的多种方式、进程间数据隔离、进程的join方法、IPC机制等

    目录 同步与异步 阻塞与非阻塞 综合使用 创建进程的多种方式 进程间数据隔离 进程的join方法 IPC机制 生产者消费者模型 进程对象的多种方法 守护进程 僵尸进程与孤儿进程 多进程数据错乱问题 同 ...

  7. Java开发学习(四十五)----MyBatisPlus查询语句之映射匹配兼容性

    1.映射匹配兼容性 我们已经能从表中查询出数据,并将数据封装到模型类中,这整个过程涉及到一张表和一个模型类: 之所以数据能够成功的从表中获取并封装到模型对象中,原因是表的字段列名和模型类的属性名一样. ...

  8. 【每日一题】【动态规划】2022年1月30日-NC127 最长公共子串

    描述 给定两个字符串str1和str2,输出两个字符串的最长公共子串 题目保证str1和str2的最长公共子串存在且唯一. 方法1:dp数组存子串 import java.util.*; public ...

  9. Keras网络可视化方法

    Keras网络可视化方法 Keras模型可视化 Keras可视化依赖的两个包 参考链接 Keras模型可视化 代码: from keras.utils import plot_model plot_m ...

  10. ast在爬虫上的应用

    https://astexplorer.net/ https://zhuanlan.zhihu.com/p/371710865 1.基础了解 const {parse} =require(" ...