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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青衫磊落长歌行

觉得小黑这篇文章不赖,打赏哟~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值