关于Unity中UGUI 图片实现拖拽功能

应用方法:将下面脚本挂载在需要拖拽功能的UI图片上即可

两种拖拽选择:A.中心拖拽(图片中心跟随鼠标位置)m_isPrecision为false;

       B.精准拖拽(图片被鼠标点击的位置跟随鼠标位置)m_isPrecision为true;

 1 /*************************************************
 2  * 项目名称:UGUI通用
 3  * 脚本创建人:魔卡
 4  * 脚本创建时间:2017.12.14
 5  * 脚本功能:UI图片拖拽功能(将脚本挂载在需要拖放的图片上)
 6  * ***********************************************/
 7 using UnityEngine;
 8 using System.Collections;
 9 using UnityEngine.EventSystems;
10
11 //UI图片拖拽功能类
12 public class UIDragByMocha : MonoBehaviour,IBeginDragHandler, IDragHandler, IEndDragHandler
13 {
14     [Header( "是否精准拖拽")]
15     public bool m_isPrecision;
16
17     //存储图片中心点与鼠标点击点的偏移量
18     private Vector3 m_offset;
19
20     //存储当前拖拽图片的RectTransform组件
21     private RectTransform m_rt;
22     void Start()
23     {
24         //初始化
25         m_rt= gameObject.GetComponent<RectTransform>();
26     }
27
28     //开始拖拽触发
29     public void OnBeginDrag(PointerEventData eventData)
30     {
31         //如果精确拖拽则进行计算偏移量操作
32         if (m_isPrecision)
33         {
34             // 存储点击时的鼠标坐标
35             Vector3 tWorldPos;
36             //UI屏幕坐标转换为世界坐标
37             RectTransformUtility.ScreenPointToWorldPointInRectangle(m_rt, eventData.position, eventData.pressEventCamera, out tWorldPos);
38             //计算偏移量
39             m_offset = transform.position - tWorldPos;
40         }
41             //否则,默认偏移量为0
42         else
43         {
44             m_offset = Vector3.zero;
45         }
46
47         SetDraggedPosition(eventData);
48     }
49
50     //拖拽过程中触发
51     public void OnDrag(PointerEventData eventData)
52     {
53         SetDraggedPosition(eventData);
54     }
55
56     //结束拖拽触发
57     public void OnEndDrag(PointerEventData eventData)
58     {
59         SetDraggedPosition(eventData);
60     }
61
62     /// <summary>
63     /// 设置图片位置方法
64     /// </summary>
65     /// <param name="eventData"></param>
66     private void SetDraggedPosition(PointerEventData eventData)
67     {
68         //存储当前鼠标所在位置
69         Vector3 globalMousePos;
70         //UI屏幕坐标转换为世界坐标
71         if (RectTransformUtility.ScreenPointToWorldPointInRectangle(m_rt, eventData.position, eventData.pressEventCamera, out globalMousePos))
72         {
73             //设置位置及偏移量
74             m_rt.position = globalMousePos + m_offset;
75         }
76     }
77 }
时间: 2024-10-22 23:50:35

关于Unity中UGUI 图片实现拖拽功能的相关文章

winform中文本框添加拖拽功能

对一个文本框添加拖拽功能: private void txtFolder_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { e.Effect = DragDropEffects.Link; this.txtFolder.Cursor = System.Windows.Forms.Cursors.Arrow;//指定鼠标形状 } else { e.Effect

Unity UGUI 实现简单拖拽功能

说到拖拽,那必然离不开坐标,UGUI 的坐标有点不一样,它有两种坐标,一种是屏幕坐标,还有一种就是 UI 在Canvas内的坐标(暂时叫做ugui坐标),这两个坐标是不一样的,所以拖拽就需要转换. 因为鼠标的移动是屏幕坐标,而 UI 的移动是ugui坐标.转换的方法: RectTransformUtility.ScreenPointToLocalPointInRectangle ( - ); 这个方法可以把屏幕坐标转换成 ugui 坐标.这里我们只需要知道 UI 的坐标和鼠标的坐标是不一样的,他

使用UGUI实现拖拽功能(拼图小游戏)

实现方式 1.引入UGUI自带的事件系统 UnityEngine.EventSystems 2.为我们的类添加接口 IBeginDragHandler, IDragHandler, IEndDragHandler 1 using UnityEngine; 2 using System.Collections; 3 using UnityEngine.EventSystems; 4 5 public class DragOnPic : MonoBehaviour,IBeginDragHandler

Android图片的拖拽与缩放

Android图片的拖拽与缩放 2014年5月9日 我们在使用应用当中经常需要浏览图片,比如在微信当中,点击图片之后可以对图片进行缩放. 本博客介绍如何对图片进行拖拽和缩放,这首先要了解Android中的触摸机制了,在屏幕中有手指按下.手指抬起.手指移动还有多个手指触摸的动作.我们要实现对图片的拖拽和缩放就是要基于这些动作来进行逻辑处理. 图片的拖拽主要是计算手指开始的位置与当前手指的位置关系,来进行平移的,具体可以看代码. 图片的缩放就涉及到计算两点之间的距离来得到缩放比,调用矩阵方法来达到缩

Ant Design -- 图片可拖拽效果,图片跟随鼠标移动

Ant Design 图片可拖拽效果,图片跟随鼠标移动,需计算鼠标在图片中与图片左上角的X轴的距离和鼠标在图片中与图片左上角的Y轴的距离. constructor(props) { super(props); this.dragDrop = false; // 图片是否被拖动中 this.apartX = 0; // 鼠标在图片中与图片左上角的X轴的距离 this.apartY = 0; //鼠标在图片中与图片左上角的Y轴的距离 this.state = { value: 1, previewV

C#中实现控件拖拽效果(How to DragDrop Control in C#)

当产品间需要交互实现数据传递,或产品需要从外部导入文件时,通过控件拖拽来实现是个不错的选择.在UI上支持控件拖拽,可极大提升用户体验.拖拽本身并不神秘,它的本质实际是一个数据交换的过程.控件接受从其他地方来的数据,并进行处理.数据交换有多种方法,Windows中剪贴板可能就是用的最多,但最不被注意的一种方法.下面介绍用C#实现控件拖拽,并通过剪切板交换数据. 对于拖拽的对象,需要在MouseDown或ItemDrag中调用DoDragDrop,传递要拖拽的数据对象并触发拖拽.总的来说,当用户调用

WIN32API 图标拖拽功能的基本配置方法

基本的方法就是通过微软官网提供的事列来完成整个操作过程, 微软链接:https://docs.microsoft.com/en-us/windows/desktop/controls/using-image-lists; https://docs.microsoft.com/en-us/windows/desktop/controls/using-treeview 1.通过WIN32 API的公开控件库 中的 Image_list来实现功能 在实现功能的第一步是加入公共控件库的头文件以及dll.

Atitit。D&amp;D drag&amp;drop拖拽功能c#.net java swing的对比与实现总结

Atitit.D&D drag&drop拖拽功能c#.net java swing的对比与实现总结 1. 实现一个D&D操作一般包括三个步骤: 1 2. .net黑头的拖曳机制.必须有DragEnter事件(单独写DragDrop事件是不会具有拖拽功能的) 2 3. ---java黑头的拖曳..必须有DragEnter事件(单独写 Drop事件是不会具有拖拽功能的) 2 4. 代码 3 5. 参考 5 1. 实现一个D&D操作一般包括三个步骤: 首先实现一个拖拽源,这个拖拽

bcb ole拖拽功能的实现

最近项目中用到了OLE 拖拽功能 和BCB 一个Form的Drag 不同的是,只有实现了OLE 拖拽才能,从其他程序拖拽数据到Form 下面的代码实现了,同HTML网页拖拽到Form时,Form获得HTML数据 其核心思想是, 1,要实现 COM的 IDropTarget 接口 2,RegisterDragDrop(handle,this); 注册窗口的拖拽 3,窗口类构造 OleInitialize(NULL); 4,窗口类析构时 OleUninitialize(); 5,在下面的代码中,我将