ugui拖拽
整理了下以前写的
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拖拽的更多相关文章
- 使用UGUI实现拖拽功能(拼图小游戏)
实现方式 1.引入UGUI自带的事件系统 UnityEngine.EventSystems 2.为我们的类添加接口 IBeginDragHandler, IDragHandler, IEndDragH ...
- Unity3D UGUI窗口拖拽
在开发UGUI时 我们时常需要做一个窗口拖拽的功能 先上代码 using UnityEngine; using UnityEngine.EventSystems; public class DragW ...
- Unity UGUI 实现简单拖拽功能
说到拖拽,那必然离不开坐标,UGUI 的坐标有点不一样,它有两种坐标,一种是屏幕坐标,还有一种就是 UI 在Canvas内的坐标(暂时叫做ugui坐标),这两个坐标是不一样的,所以拖拽就需要转换. 因 ...
- 使用NGUI实现拖拽功能(拼图小游戏)
上一次用UGUI实现了拼图小游戏,这次,我们来用NGUI来实现 实现原理 NGUI中提供了拖拽的基类UIDragDropItem,所以我们要做的就是在要拖拽的图片上加一个继承于该类的脚本,并实现其中的 ...
- Unity输出PC端(Windows) 拖拽文件到app中
需求:给策划们写一个PC端(Window)的Excel导表工具.本来用OpenFile打开FileExplorerDialog后让他们自己选择想要添加的Excel文件就行了,结果有个需求是希望能拖拽E ...
- 在屏幕拖拽3D物体移动
3D物体的拖拽不同于2D的.因为3D物体有x,y,z当然.实际拖拽还是在XZ平面.只是多了几个转换 using UnityEngine; using System.Collections; publi ...
- NGUI拖拽简介
挂上UIDragDropItem就可以实现拖拽,按钮监听Drop消息即可实现对拖放的监听. UIDragDropItem有一个Clone On Drag选项,勾上可以克隆,但会被ScrollView遮 ...
- Unity实现放大缩小以及相机位置平移实现拖拽效果
放大缩小功能是游戏开发中用到的功能,今天就来讲一下Unity中放大缩小怎么实现. 1.IDragHandler, IBeginDragHandler, IEndDragHandler这三个接口是Uni ...
- JavaScript动画-拖拽改变元素大小
▓▓▓▓▓▓ 大致介绍 拖拽改变元素大小是在模拟拖拽上增加了一些功能 效果:拖拽改变元素大小 ▓▓▓▓▓▓ 拖拽改变元素大小原理 首先这个方块得知道我们想要改变这个它的大小,所以我给它设定一个范围,当 ...
随机推荐
- Java并发编程实战 第15章 原子变量和非阻塞同步机制
非阻塞的同步机制 简单的说,那就是又要实现同步,又不使用锁. 与基于锁的方案相比,非阻塞算法的实现要麻烦的多,但是它的可伸缩性和活跃性上拥有巨大的优势. 实现非阻塞算法的常见方法就是使用volatil ...
- SpringMVC的工作原理及MVC设计模式
SpringMVC的工作原理: 1.当用户在浏览器中点击一个链接或者提交一个表单时,那么就会产生一个请求(request).这个请求会携带用户请求的信息,离开浏览器. 2.这个请求会首先到达Sprin ...
- 安装 mysql odbc连接器
下载地址: https://dev.mysql.com/downloads/connector/odbc/ 可以选择旧版本的下载 一. 配置数据源 1. 安装后如果找不到软件可以按 win键 后 输 ...
- Canvas + WebSocket + Redis 实现一个视频弹幕
原文出自:https://www.pandashen.com 页面布局 首先,我们需要实现页面布局,在根目录创建 index.html 布局中我们需要有一个 video 多媒体标签引入我们的本地视频, ...
- inotify.sh脚本范例
inotify.sh脚本范例 [root@A-Server58 ~]# cat /server/scripts/inotify.sh#!/bin/bash#parahost01=192.1 ...
- IP地址(参考百度百科)
题目1:用子网掩码划分网络时,如果划分8个子网,则需要4位.因为24-2>=8.(全0代表网络自身,全1代表广播地址,所以减2) 以C类地址为例,(1)8个子网,则4位子网,主机号为后4位,主机 ...
- js-弹框倒计时三秒后,自动关闭???
效果: js: //弹出窗,三秒倒计时 countdown(){ //点击发布按钮后,三秒倒计时开始 $(".btn-pub").click(function(){ var cou ...
- Swagger+SpringBoot整理
maven依赖 1 <dependency> 2 <groupId>io.springfox</groupId> 3 <artifactId>sprin ...
- 【Python】学习笔记七:函数
函数的目的:重复使用相同的一段程序 函数的定义 下面是我自定义的一个求a,b,c三个参数平方和的函数 #a,b,c三个参数的平方和 def pow_sum(a,b,c): x = pow(a,2)+p ...
- Hive数据导入Elasticsearch
Elasticsearch Jar包准备 所有节点导入elasticsearch-hadoop-5.5.1.jar /opt/cloudera/parcels/CDH-5.12.0-1.cdh5.12 ...