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号吃的螃蟹宴,别提多爽了?

最新文章

  1. DOM getElementsByClassName IE兼容方案
  2. 查看Windows下引起Oracle CPU占用率高的神器-qslice
  3. VS2012的调试插件Image Watch,opencv编程神器
  4. Web UI自动化测试中绕开验证码登陆方式浅谈
  5. 第二章:k-近邻算法
  6. asp.net中获取当前url的方法
  7. EPANET中的哈希文件——hash.c
  8. HDU-2604_Queuing
  9. KVM/QEMU桥接网络设置及kvm资料
  10. Wix#可以直接写C#代码来生成Wix的MSI安装文
  11. Android 5.1 Camera 架构学习之Camera初始化
  12. POJ 1830 【高斯消元第一题】
  13. linux+nginx+mysql+php
  14. 部署 k8s Cluster(下)- 每天5分钟玩转 Docker 容器技术(119)
  15. 分享一个CUDA的环境配置属性表,从此不用再担心配置不好CUDA环境了
  16. LongAdder 测试
  17. WPFの实现word的缩放效果
  18. Android设计模式-观察者模式
  19. 2-SET 前缀优化建图
  20. java类中根据已有的变量复写类的toString方法

热门文章

  1. JS逆向实战4--cookie——__jsl_clearance_s 生成
  2. SqlDataAdapter使用小结
  3. 23种设计模式之自定义Spring框架(五)
  4. 秀++视频算法仓库-厂家对接规约V5
  5. 用于数据科学的顶级 C/C++ 机器学习库整理
  6. go如何编写命令行(cli)程序
  7. jdk线程池ThreadPoolExecutor优雅停止原理解析(自己动手实现线程池)(二)
  8. 通过docker部署grafana和mysql
  9. uni 结合vuex 编写动态全局配置变量 this.baseurl
  10. [论文阅读] 颜色迁移-Correlated Color Space