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

前言:

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

实现接口

一、鼠标进入&&离开

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

1:IPointerEnterHandler

2:IPointerExitHandler

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems; public class EntryorExitUI : MonoBehaviour , IPointerEnterHandler , IPointerExitHandler
{
/// <summary>
/// 当鼠标进入UI后执行的事件执行的
/// </summary>
public void OnPointerEnter(PointerEventData eventData)
{
Debug.Log("鼠标已经进入,请开始你的表演");
} /// <summary>
/// 当鼠标离开UI后执行的事件执行的
/// </summary>
public void OnPointerExit(PointerEventData eventData)
{
Debug.Log("鼠标已经离开,你的表演结束了!");
}
}

二、拖拽

三个可实现接口

1:IDragHandler

2:IBeginDragHandler

3:IEndDragHandler

提醒:小黑亲身试坑的结果:那就是一定要实现IDragHandler,然后实现IBeginDragHandler和IEndDragHandler。
!!!!深坑!!!! 一定要记住,一定要实现IDragHandler。

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class DragUI : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
{
private Vector3 offset; //存储按下鼠标时的图片-鼠标位置差
private Vector3 arragedPos; //保存经过整理后的向量,用于图片移动 /// <summary>
/// 开始拖拽起始
/// </summary>
public void OnBeginDrag(PointerEventData eventData)
{
if (RectTransformUtility.ScreenPointToWorldPointInRectangle(transform.GetComponent<RectTransform>(), Input.mousePosition
, eventData.enterEventCamera, out arragedPos))
{
offset = transform.position - arragedPos;
}
} /// <summary>
/// 拖拽中
/// </summary>
public void OnDrag(PointerEventData eventData)
{
transform.position = offset + Input.mousePosition;
} /// <summary>
/// 拖拽结束
/// </summary>
public void OnEndDrag(PointerEventData eventData)
{
transform.position = transform.parent.transform.position;
}
}

三、合并

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

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems; public class DragUI : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler, IPointerExitHandler, IPointerEnterHandler
{
private Image thisimg;
private Vector3 offset; //存储按下鼠标时的图片-鼠标位置差
private Vector3 arragedPos; //保存经过整理后的向量,用于图片移动 /// <summary>
/// 开始拖拽起始
/// </summary>
public void OnBeginDrag(PointerEventData eventData)
{
if (RectTransformUtility.ScreenPointToWorldPointInRectangle(transform.GetComponent<RectTransform>(), Input.mousePosition
, eventData.enterEventCamera, out arragedPos))
{
offset = transform.position - arragedPos;
}
} /// <summary>
/// 拖拽中
/// </summary>
public void OnDrag(PointerEventData eventData)
{
transform.position = offset + Input.mousePosition;
} /// <summary>
/// 拖拽结束
/// </summary>
public void OnEndDrag(PointerEventData eventData)
{
transform.position = transform.parent.transform.position;
} /// <summary>
/// 当鼠标进入UI后执行的事件执行的
/// </summary>
public void OnPointerEnter(PointerEventData eventData)
{
Debug.Log("鼠标已经进入,请开始你的表演");
} /// <summary>
/// 当鼠标离开UI后执行的事件执行的
/// </summary>
public void OnPointerExit(PointerEventData eventData)
{
Debug.Log("鼠标已经离开,你的表演结束了!");
}
}

四、结语

总之呢,小黑还是没有找到如何自己去编写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. 下一代工具链「GitHub 热点速览 v.22.43」

    作为一个前端工程师,你这周被下一代的前端工具链 Turbo 刷屏了吗?不只是 Turbo 这个小工具,作为一个社区生产力工具,本周思否还开源了他们的问答系统 answer,能直接用上相关的技术标签也省 ...

  2. 死磕面试系列,Java到底是值传递还是引用传递?

    Java到底是值传递还是引用传递? 这虽然是一个老生常谈的问题,但是对于没有深入研究过这块,或者Java基础不牢的同学,还是很难回答得让人满意. 可能很多同学能够很轻松的背出JVM.分布式事务.高并发 ...

  3. 【深入浅出 Yarn 架构与实现】2-3 Yarn 基础库 - 服务库与事件库

    一个庞大的分布式系统,各个组件间是如何协调工作的?组件是如何解耦的?线程运行如何更高效,减少阻塞带来的低效问题?本节将对 Yarn 的服务库和事件库进行介绍,看看 Yarn 是如何解决这些问题的. 一 ...

  4. MvvmLight框架的基本使用

    关于MvvmLight框架的介绍可以看这篇,说的很详细,在此记录下来以作复习,通过一个简单的例子说明MvvmLight的基本使用 https://www.cnblogs.com/3xiaolonglo ...

  5. 强软弱引用,ThreadLocal和内存泄漏

    强引用 写法:Object obj=new Object() 引用强度:最强 只要被引用着,就不会被gc(垃圾回收)回收掉. 软引用 写法:SoftReference<String> sr ...

  6. 修改api-server支持的NodePort端口映射范围

    创建svc资源报错显示:provided port is not in the valid range. The range of valid ports is 30000-32767 k8s集群默认 ...

  7. 基于k8s的发布系统的实现

    综述 首先,本篇文章所介绍的内容,已经有完整的实现,可以参考这里. 在微服务.DevOps和云平台流行的当下,使用一个高效的持续集成工具也是一个非常重要的事情.虽然市面上目前已经存在了比较成熟的自动化 ...

  8. (工具) 性能测试基准软件 lmBench (待补充)

    1. lmBench 介绍 Lmbench是一套简易,可移植的,符合ANSI/C标准为UNIX/POSIX而制定的微型测评工具.一般来说,它衡量两个关键特征:反应时间和带宽.Lmbench旨在使系统开 ...

  9. 关于deepin-wine或wine更换字体方法

    前言 首先要知道,deepin-wine打包的QQ和你自己用 deepin-wine跑的windows软件,他们所在不是同一个容器 deepin打包QQ所在的容器,在你的 ~/.deepinwine ...

  10. Scanner例题讲解

    Scanner例题讲解 题:输入多个平均数,求其总和与平均数;每输入一个数用回车确认,通过输入非数字来结束输入并输出执行结果  public class Demo05 {     //输入多个平均数, ...