Unity UGUI实现鼠标拖动图片

简介: 在 Unity UGUI 中实现鼠标拖动图片功能,主要涉及事件检测、坐标转换和物体位置更新。根据鼠标移动量更新图片位置。代码示例展示了如何通过这些步骤实现拖动效果。

在 Unity UGUI 中实现鼠标拖动图片的功能,其核心原理主要涉及到事件检测、坐标转换以及物体位置更新,下面为你详细介绍整个过程:

  1. 事件检测
    借助 Unity 提供的事件系统来捕捉鼠标的交互动作,特别是鼠标按下、拖动和释放这几个关键事件。要实现此功能,需让脚本继承特定的接口,这些接口定义了相应的事件处理方法。具体如下:
    IPointerDownHandler:该接口用于处理鼠标按下事件,当鼠标按下图片时,会触发 OnPointerDown 方法。
    IDragHandler:用于处理鼠标拖动事件,在鼠标拖动过程中,会持续调用 OnDrag 方法。
    IPointerUpHandler:处理鼠标释放事件,当鼠标释放时,会调用 OnPointerUp 方法。
  2. 坐标转换
    由于鼠标在屏幕上的坐标是屏幕空间坐标,而 UGUI 中的 UI 元素使用的是画布空间坐标,因此需要进行坐标转换,将鼠标的屏幕坐标转换为 UI 元素所在的画布坐标。可以使用 RectTransformUtility.ScreenPointToLocalPointInRectangle 方法来完成这一转换。
  3. 物体位置更新
    在鼠标拖动过程中,根据鼠标的移动量来更新图片的位置。通过计算鼠标在当前帧相对于上一帧的偏移量,将这个偏移量应用到图片的位置上,从而实现图片跟随鼠标移动的效果。

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
/// <summary>
/// **************************UGUI拖动图片,脚本挂在Image上即可*********************************
/// </summary>
public class TuoDongWuPin : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
{
    //需要被实例化的与制体
    //public GameObject YuSheWu;
    //实例化后的对象
    private Image img;
    Vector3 offPos;//存储按下鼠标时的图片-鼠标位置差
    Vector3 arragedPos; //保存经过整理后的向量,用于图片移动
    /// <summary>
    /// 开始拖拽的时候
    /// </summary>
    /// <param name="eventData"></param>
    public void OnBeginDrag(PointerEventData eventData)
    {
        if (RectTransformUtility.ScreenPointToWorldPointInRectangle(transform.GetComponent<RectTransform>(), Input.mousePosition
     , eventData.enterEventCamera, out arragedPos))
        {
            offPos = transform.position - arragedPos;
        }
    }
    /// <summary>
    /// 拖拽中
    /// </summary>
    /// <param name="eventData"></param>
    public void OnDrag(PointerEventData eventData)
    {
        transform.position = offPos + Input.mousePosition;
    }
    /// <summary>
    /// 拖拽结束
    /// </summary>
    /// <param name="eventData"></param>
    public void OnEndDrag(PointerEventData eventData)
    {
        transform.position = transform.parent.transform.position;
    }
}
相关文章
|
9月前
鼠标经过图片图片放大效果
鼠标经过图片图片放大效果
57 0
|
8月前
|
前端开发
CSS动画效果(鼠标滑过按钮动画)
CSS动画效果(鼠标滑过按钮动画)
|
9月前
|
前端开发
Flutter笔记:光影动画按钮、滚动图标卡片组等
Flutter笔记:光影动画按钮、滚动图标卡片组等
98 0
|
JavaScript 前端开发
js实现移动端图片预览:手势缩放, 手势拖动,双击放大...
原文:js实现移动端图片预览:手势缩放, 手势拖动,双击放大... 前言本文将介绍如何通过js实现移动端图片预览,包括图片的 预览模式,手势缩放,手势拖动,双击放大等基本功能; 扫码查看示例效果: 代码地址http://pangyongsheng.github.io/imgPreview/ 一、功能介绍   图片预览主要有以下几个功能点组成: 监听图片点击事件,进入图片预览模式 自定义手势事件, (双指缩放,滑动,双击。
3279 0
UGUI系列-鼠标移动到按钮上显示信息(Unity3D)
有时候图标不能很好的说明这个功能的解释,就需要一些说明性文字显示。就比如可以在鼠标移动到UI上面的时候显示文字。 那么如何在UGUI上,鼠标移动上去显示文字说明呢。 大家都知道,当鼠标移动到button按钮上面的时候会出现变化,主要是button这个组件在控制
UGUI系列-点击图片生成物体(Unity3D)
今天给大家分享一个如何点击图片生成物体的脚本,可以把这个脚本稍微封装一下,以后也可以方便使用。 主要试用与点击图片时候响应事件,具体用法还要大家多多摸索
UGUI系列-实现进度条效果(Unity3D)
今天分享一个UGUI 图片实现进度条动画的方法,配合上资源异步加载,可以作为场景加载动画
鼠标拖拽翻页效果
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w178191520/article/details/84192737 ...
1005 0
|
前端开发 C# Windows
WPF之鼠标滑动切换图片
原文:WPF之鼠标滑动切换图片   在网上找了一会儿也没找到我想要的效果,还是自己动手,丰衣足食吧。   需求:当前面板中只显示一张图片,图片栏的下部有用来显示当前图片处于图片队列中的位置的圆球,并且点击下部栏内的圆球可以快速切换,附动画缓动效果。
1252 0