Unity3D UGUI窗口拖拽
在开发UGUI时
我们时常需要做一个窗口拖拽的功能
先上代码
using UnityEngine;
using UnityEngine.EventSystems; public class DragWindow : MonoBehaviour,IPointerDownHandler,IDragHandler
{
private Vector2 localMousePos;
private Vector3 planeLocalPos;
private RectTransform targetObject;
private RectTransform parentRectTransform;
private RectTransform targetRectTransform; void Awake()
{
targetObject = this.transform.GetComponent<RectTransform>();
if (targetObject == null)
{
targetObject = transform as RectTransform;
} parentRectTransform = targetObject.parent as RectTransform;
targetRectTransform = targetObject as RectTransform; } public void OnPointerDown(PointerEventData data)
{
planeLocalPos = targetRectTransform.localPosition;
RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRectTransform, data.position, data.pressEventCamera, out localMousePos);
targetObject.gameObject.transform.SetAsLastSibling();
} public void OnDrag(PointerEventData data)
{ Vector2 localPointerPosition;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRectTransform, data.position, data.pressEventCamera, out localPointerPosition))
{
Vector3 offsetToOriginal = localPointerPosition - localMousePos; targetObject.localPosition = planeLocalPos + offsetToOriginal;
}
}
}
使用方法:
直接将此脚本添加到需要拖拽的窗口就好
此脚本使用了UGUI内置的事件接口IPointerDownHandler和IDragHandler
并在接口方法OnPointerDown和OnDrag实现了相应的拖拽逻辑
Unity3D UGUI窗口拖拽的更多相关文章
- nw.js FrameLess Window下的窗口拖拽与窗口大小控制
nw.js FrameLess Window下的窗口拖拽与窗口大小控制 很多时候,我们觉得系统的Frame框很难看,于是想自定义. 自定义Frame的第一步是在package.config文件中将fr ...
- JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
转自<JS实现漂亮的窗口拖拽效果(可改变大小.最大化.最小化.关闭)>:http://www.jb51.net/article/73157.htm 这篇文章主要介绍了JS实现漂亮的窗口 ...
- QT 窗口拖拽移动实现
我们知道,要实现窗口移动可以直接鼠标点住窗口的标题栏实现拖拽移动,这是窗口默认的行为,在QT中的事件响应函数为moveEvent. 但是现实中经常需要鼠标点住窗口客户区域实现窗口的拖拽移动,代码实现如 ...
- iPhone手机解锁效果&&自定义滚动条&&拖拽--Clone&&窗口拖拽(改变大小/最小化/最大化/还原/关闭)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- electron-vue 窗口拖拽及自定义边框,及关闭缩小放大化方法
1.窗口的最小化按钮和关闭按钮以及标题栏自定义,不使用 electron 自身携带的原生标题栏 在src文件夹下main下index.js文件添加 mainWindow = new BrowserWi ...
- 使用UGUI实现拖拽功能(拼图小游戏)
实现方式 1.引入UGUI自带的事件系统 UnityEngine.EventSystems 2.为我们的类添加接口 IBeginDragHandler, IDragHandler, IEndDragH ...
- QT笔记之自定义窗口拖拽移动
1.QT自定义标题栏,拖拽标题栏移动窗口(只能拖拽标题,其他位置无法拖拽) 方法一: 转载:http://blog.sina.com.cn/s/blog_4ba5b45e0102e83h.html . ...
- 关于Extjs的窗口拖拽,改变大小,背景淡化问题
大部分Extjs的Windows问题:在Extjs4代码中,只要加几句话: frame:true, //这个窗口的边边是圆的 border : false , //窗口没有边框 draggable: ...
- QT窗口拖拽功能简单应用(处理dragEnterEvent和dropEvent事件,不同的事件有不同的信息,比如mimeData)
void dragEnterEvent(QDragEnterEvent *event); void dropEvent(QDropEvent *event); ui->lineEdit-> ...
随机推荐
- UVALive - 3027 Corporative Network (并查集)
这题比较简单,注意路径压缩即可. AC代码 //#define LOCAL #include <stdio.h> #include <algorithm> using name ...
- nyoj44 子串和 线性DP
线性DP经典题. dp[i]表示以i为结尾最大连续和,状态转移方程dp[i] = max (a[i] , dp[i - 1] + a[i]) AC代码: #include<cstdio> ...
- 浅谈CDN、SEO、XSS、CSRF
CDN 什么是CDN 初学Web开发的时候,多多少少都会听过这个名词->CDN. CDN在我没接触之前,它给我的印象是用来优化网络请求的,我第一次用到CDN的时候是在找JS文件时.当时找不到相对 ...
- Storm+HBase实时实践
1.HBase Increment计数器 hbase counter的原理: read+count+write,正好完成,就是讲key的value读出,若存在,则完成累加,再写入,若不存在,则按&qu ...
- 第3章 PCI总线的数据交换
PCI Agent设备之间,以及HOST处理器和PCI Agent设备之间可以使用存储器读写和I/O读写等总线事务进行数据传送.在大多数情况下,PCI桥不直接与PCI设备或者HOST主桥进行数据交换, ...
- 解决MyEclipse中的Building workspace问题
解决MyEclipse中的Building workspace问题 1.方法一 点击"Project",取消勾选"Build Automatically" 2. ...
- 嵌入式 RTP通话:视频流(H.264)的传输
从摄像头获取的视频数据,经过编码后(当然,也可以不编码,如果你觉得也很ok的话),既可以 是 开始的数据是 00 00 40 00 40 11 C1 8C 94字节) 四.RTP视频传输代码 #d ...
- TypeError: Error #1034: 强制转换类型失败:无法将 flash.events::MouseEvent@73b7cc1 转换为 mx.events.ItemClickEvent。
1.错误描述 TypeError: Error #1034: 强制转换类型失败:无法将 flash.events::MouseEvent@73b7cc1 转换为 mx.events.ItemClick ...
- python datetime 与 time模块
time模块 tmie.strptime :将时间字符串转化为时间类型 格式:time.strptime(string[string[, format]) 结果可以利用利用time.tm_year 返 ...
- JAVA IDE IntelliJ IDEA 快捷键使用详记
一.高效定位代码 1.项目之间的跳转 Ctrl + Alt + [ :切换到下一个项目窗口 Ctrl + Alt + ] : 切换到上一个项目窗口 2.文件之间的跳转↑↓←→ Ctrl + E ...