整理了下以前写的

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems; [RequireComponent(typeof(CanvasGroup))]
public class ItemDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler
{
private CanvasGroup canvasGroup;
private Transform originalGrid;//拖出的格子
public GameObject bagFrame;//拖出格子的父级
Vector2 originGridSize;//原始大小 // Start is called before the first frame update
void Start()
{
originGridSize = (transform as RectTransform).sizeDelta;
canvasGroup = GetComponent<CanvasGroup>();
} public void OnBeginDrag(PointerEventData eventData)
{
//让eventTrigger无法检测到物体,让他去检测物体后面的格子
canvasGroup.blocksRaycasts = false;
originalGrid = gameObject.transform.parent;
gameObject.transform.SetAsLastSibling();//设置ui最上层
} public void OnDrag(PointerEventData eventData)
{
//把物体设置到背景上的字节点上,是为了防止格子挡住物品
transform.SetParent(bagFrame.transform);
//跟随鼠标移动
transform.position = Input.mousePosition;
} public void OnEndDrag(PointerEventData eventData)
{
//结束拖拽时,鼠标所碰撞的点的物品
GameObject curEnter = eventData.pointerEnter;
//满足条件,正确地放入格子里面
if (curEnter != null && curEnter.tag == "bagGrid")
{
//设置格子的父节点
transform.SetParent(curEnter.transform, false);
//设置预制物的位置
(transform as RectTransform).localPosition = Vector3.zero;
(transform as RectTransform).localRotation = Quaternion.identity;
(transform as RectTransform).localScale = Vector3.one;
//设置成原来的大小
(transform as RectTransform).sizeDelta = originGridSize;
}
//没有满足条件
else
{
//设置格子的父节点
transform.SetParent(originalGrid.transform);
//设置预制物的位置
(transform as RectTransform).localPosition = Vector3.zero;
(transform as RectTransform).localRotation = Quaternion.identity;
(transform as RectTransform).localScale = Vector3.one;
//设置成原来的大小
(transform as RectTransform).sizeDelta = originGridSize;
print("没有满足条件");
} //eventTrigger可以检测到物体
canvasGroup.blocksRaycasts = true;
} //点击
public void OnPointerClick(PointerEventData eventData)
{
print("点击");
} //鼠标进入
public void OnPointerEnter(PointerEventData eventData)
{
print("进入");
} //鼠标退出
public void OnPointerExit(PointerEventData eventData)
{
print("退出");
}
}

ugui拖拽的更多相关文章

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

    实现方式 1.引入UGUI自带的事件系统 UnityEngine.EventSystems 2.为我们的类添加接口 IBeginDragHandler, IDragHandler, IEndDragH ...

  2. Unity3D UGUI窗口拖拽

    在开发UGUI时 我们时常需要做一个窗口拖拽的功能 先上代码 using UnityEngine; using UnityEngine.EventSystems; public class DragW ...

  3. Unity UGUI 实现简单拖拽功能

    说到拖拽,那必然离不开坐标,UGUI 的坐标有点不一样,它有两种坐标,一种是屏幕坐标,还有一种就是 UI 在Canvas内的坐标(暂时叫做ugui坐标),这两个坐标是不一样的,所以拖拽就需要转换. 因 ...

  4. 使用NGUI实现拖拽功能(拼图小游戏)

    上一次用UGUI实现了拼图小游戏,这次,我们来用NGUI来实现 实现原理 NGUI中提供了拖拽的基类UIDragDropItem,所以我们要做的就是在要拖拽的图片上加一个继承于该类的脚本,并实现其中的 ...

  5. Unity输出PC端(Windows) 拖拽文件到app中

    需求:给策划们写一个PC端(Window)的Excel导表工具.本来用OpenFile打开FileExplorerDialog后让他们自己选择想要添加的Excel文件就行了,结果有个需求是希望能拖拽E ...

  6. 在屏幕拖拽3D物体移动

    3D物体的拖拽不同于2D的.因为3D物体有x,y,z当然.实际拖拽还是在XZ平面.只是多了几个转换 using UnityEngine; using System.Collections; publi ...

  7. NGUI拖拽简介

    挂上UIDragDropItem就可以实现拖拽,按钮监听Drop消息即可实现对拖放的监听. UIDragDropItem有一个Clone On Drag选项,勾上可以克隆,但会被ScrollView遮 ...

  8. Unity实现放大缩小以及相机位置平移实现拖拽效果

    放大缩小功能是游戏开发中用到的功能,今天就来讲一下Unity中放大缩小怎么实现. 1.IDragHandler, IBeginDragHandler, IEndDragHandler这三个接口是Uni ...

  9. JavaScript动画-拖拽改变元素大小

    ▓▓▓▓▓▓ 大致介绍 拖拽改变元素大小是在模拟拖拽上增加了一些功能 效果:拖拽改变元素大小 ▓▓▓▓▓▓ 拖拽改变元素大小原理 首先这个方块得知道我们想要改变这个它的大小,所以我给它设定一个范围,当 ...

随机推荐

  1. 由于代码环境有dev test prod ,每次提交代码需要很多环境,shell脚本即可解决重复命令问题

    在项目外面写入push.sh 内容为 if [  $1!='' ] then    msg=$1; else    msg='bug'; fi   git add .  git commit -m $ ...

  2. Electron开发使用Vue Devtools

    转自 [https://orchidflower.oschina.io/2017/03/29/Using-Vue-Devtools-in-Electron/] 2.2 安装步骤 首先在Chrome中安 ...

  3. Python 变量类型Ⅲ

    Python 元组 元组是另一个数据类型,类似于 List(列表). 元组用 () 标识.内部元素用逗号隔开.但是元组不能二次赋值,相当于只读列表. 以上实例输出结果: 以下是元组无效的,因为元组是不 ...

  4. 手动安装jar包到maven仓库

    1.手动安装jar包到maven仓库 本地没有下载安装maven,但是eclipse已经集成的maven. 选中任何一个maven项目,右键/Run as/maven build... 在Goals输 ...

  5. Halcon10.0 + VS2010

    新建一个C++空项目 添加c1.pp 复制example1.cpp的代码 配置include\lib\bin\Linker之后

  6. 苹果cms怎么上传本地视频资源

    今天我们来简单分享下苹果cms怎么上传本地视频,采集资源站的资源我们已经熟知了,但是有的伙伴们想要上传自己制作或是录制的视频应该怎么操作呢?这个问题有多种方法,今天我们先简单的说2种方法. 一,上传到 ...

  7. pyinstaller打包的exe太大?你需要嵌入式python玄学 惊喜篇

    上篇讲到 pyinstaller打包exe太大的问题 CodingDog:pyinstaller打包的exe太大?你需要嵌入式python玄学 前提篇​zhuanlan.zhihu.com 那既然py ...

  8. 技术干货:Python解析CSV

    1. 什么是CSV CSV(Commma-Separated Value)是都好分隔符,其文件以纯文本形式存储表格数据(数字和文本). 案例: 2. 为什么要使用CSV 与专有的二进制文件格式截然不同 ...

  9. A - 地震预测

    A - 地震预测 怀特先生是一名研究地震的科学家,最近他发现如果知道某一段时间内的地壳震动能量采样的最小波动值之和,可以有效地预测大地震的发生. 假设已知一段时间的n次地壳震动能量的采样值为a1,a2 ...

  10. Vue中computed、methods、watch的联系和区别

    computed是计算树形,methods是方法. new Vue({ el: '#example', data: { message: 'Hello' }, computed: { reversed ...