uGUI练习(七) Drag And Drop
练习目标
练习UI的拖放操作
一、相关组件
- EventTrigger
- Canvas Group
- ScrollRect
- Mask
- Scrollbar
二、拖放练习
1、创建一个Panel,命名Panel1,添加EventTrigger组件,稍稍改一下Panel的颜色
2、Panel1下创建一个Text,输入”Test Draggable\n object”,设置字体颜色及Text超出处理
DragDropScene.cs代码
3、在 uGUI练习(五) Draggable Object一文中,已经大概了解uGUI的EventSystem,需要继承三个事件接口,接下来我们创建一个DragDropScene.cs,代码如下
- using UnityEngine;
- using System.Collections;
- using UnityEngine.UI;
- using UnityEngine.EventSystems;
- public class DragDropScene : MonoBehaviour,IDragHandler,IPointerDownHandler,IPointerUpHandler
- {
- public void OnDrag(PointerEventData eventData)
- {
- GetComponent<RectTransform>().pivot.Set(0,0);
- transform.position=Input.mousePosition;
- }
- public void OnPointerDown(PointerEventData eventData)
- {
- transform.localScale=new Vector3(0.7f,0.7f,0.7f);
- }
- public void OnPointerUp(PointerEventData eventData)
- {
- transform.localScale=new Vector3(1f,1f,1f);
- }
- }
4、上面的代码就是 按下,拖动,抬起 这三个事件的处理.把这个脚本绑定在Panel1,按Ctrl+P 运行游戏,在Game视图我们就可以拖动Panel1了.
5、选中创建好的Panel1,按Ctrl+D Copy 几个Panel,更改成不同的颜色,如下图所示:
6、在上面的步骤中,我们创建了几个Panel1,并且给它们都绑定了DragDropScene.cs,但还没有实现Drop的事件;
接下来,我们创建一个Panel,命名DropPanel,用来作停放Panel的容器
7、在DropPanel下创建一个Panel,命名Grid,并给它添加Grid Layout Group和Canvas Group组件
8、为了让我们知道Drop是可以停放的,我们在Grid下创建两个Panel,同样的给它们绑定DragDropScene.cs,如下图:
9、接下来就是把Panel,拖动并停放在DropPanel下,如下图所示
修改事件代码
10、打开DragDropScene.cs脚本,添加一行,并修改OnPointerDown(),OnPointUp( )
- [SerializeField] GameObject grid=null,rootCanvas=null;
- public void OnPointerDown(PointerEventData eventData)
- {
- transform.localScale=new Vector3(0.7f,0.7f,0.7f);
- transform.parent=rootCanvas.transform;
- }
- public void OnPointerUp(PointerEventData eventData)
- {
- transform.localScale=new Vector3(1f,1f,1f);
- RaycastHit2D hit = Physics2D.Raycast(Input.mousePosition,-Vector2.up);
- if (hit.collider != null) {
- //如果射线检测到的gameobject为grid,就把当前Panel放在grid节点下
- if(hit.collider.gameObject.name=="Grid")
- transform.parent=grid.transform;
- }
- }
上面的代码,当鼠标抬起时,如果是在Grid的上方,就把当前Panel设置在Grid下,鼠标按下时,设置当前Panel的Parent为rootCanvas11、为DragDropScene设置参数值:
12、到这一步,我们就可以拖动Panel放到Grid下了,为了避免Grid下的Panel超出,在uGUI练习(六) ScrollView一文中我们使用了SrollRect和Mask。所以现在我们就给DropPanel添加上这两个组件,当然最后也可以给DropPanel添加Scrollbar
组件代码
拖拽组件,修改部分代码,更符合实际项目中使用
https://github.com/zhaoqingqing/UGUIDemo 仓库中搜索:DragDropTrigger
三、CanvasGroup
CanvasGroup是一个容器,可以用来改变child的Alpha,Raycasting,Enable state.
可以用来改变child元素的state.
比如:在一段时间内window变淡,在同一个group里的child元素的alpha值也会受到影响,alpha 值=任何嵌套的group相乘。乘以canvas元素的alpha值.
CanvasGroup 可以配置为不遮挡 射线(在这个group里的任何物件都不用为图形射线考虑) ,并且元素是否相互作用.
四、EventTrigger
从事件系统接收事件并调用每一个已注册的事件.
在每一个特殊的函数中,都可以使用EventTrigger,你可以在一个事件上注册多个函数,当EventTrigger接收事件时,将按提供的顺序调用.
注意:将EventTrigger组件绑定在任何Gameobject上之后,它将拦截一切事件,并在这个对象上没有冒泡事件出现.
五、Drag && Drop 效果
uGUI练习(七) Drag And Drop的更多相关文章
- HTML5 之拖放(drag与drop)
拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. HTML5 拖放实例 ...
- 通过HTML5的Drag and Drop生成拓扑图片Base64信息
HTML5 原生的 Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过 ...
- 基于HTML5的Drag and Drop生成图片Base64信息
HTML5的Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过Drag ...
- Android 用户界面---拖放(Drag and Drop)(三)
设计拖放操作 本节主要内容如下: 1. 如何开始拖拽: 2. 在拖拽期间如何响应事件: 3. 如何响应落下事件: 4. 如何结束拖放操作. 开始拖拽 用户使用一个拖拽手势开始拖拽,通常是在 ...
- Android 用户界面---拖放(Drag and Drop)(二)
拖拽事件监听器和回调方法 View对象既可以用实现View.OnDragListener接口的拖放事件监听器,也可以用View对象的onDragEvent(DragEvent)回调方法来接收拖拽事 ...
- Android 用户界面---拖放(Drag and Drop)(一)
用Android的拖放框架,能够允许用户使用图形化的拖放手势,把数据从当前布局中的一个View对象中移到另一个View对象中.这个框架包括:拖拽事件类.拖拽监听器.以及辅助的方法和类. 尽管这个框架主 ...
- 20 Best Drag and Drop jQuery Plugins--reference
reference from:http://dizyne.net/20-best-drag-drop-jquery-plugins/ jQuery has done a great job repla ...
- [Javascript + rxjs] Simple drag and drop with Observables
Armed with the map and concatAll functions, we can create fairly complex interactions in a simple wa ...
- HTML 5 drag and drop 简介
Html 5 drag and drop 简介 HTML5提供了专门拖拽和拖放的API draggable属性 启用拖拽 draggable属性是否可被拖拽, 可选值: true, false, au ...
随机推荐
- winform(ListView及数据库连接)
一.ListView:列表展示数据1.视图 - 在其右上方小箭头点击将视图改为Largelcon:或右键属性在外观View将其改为Details2.设置列头 - 在其右上方小箭头点击选择编辑列,然后添 ...
- 微信公共平台开发4 .net
之前说了让微信发送给关注我们的粉丝普通的文本信息,下面我们来看看如何发送图文信息,需要注意的是这里说的是,让微信发给我们,而不是我们拍个图片发给微信处理,上传图片在以后的再讲.下面是发送图文消息的函数 ...
- Windows Azure 上传 VM
One of the great features of Windows Azure is VHD mobility. Simply put it means you can upload and d ...
- Windows环境下利用github快速配置git环境
在windows环境下利用github客户端我们可以直接拥有可视化的界面来管理工程,当然你也可以选择你喜欢的命令行工具来做.今天我分享一个比较快速的方式来配置git环境. 先去下载github的win ...
- 在Mac上配置Android adb命令
一 adb定义: adb(android debug bridge)是android系统中的一种命令行工具,通过它可以和android设备或模拟器通信. 二 在Mac上的配置过程 启动终端 进入当前用 ...
- Maven学习——安装与修改Maven的本地仓库路径
一.Maven的下载安装配置 1.1.下载 官网 http://maven.apache.org/download.cgi 1.2.安装配置 apache-maven-3.3.3-bin.zip 解压 ...
- Android线程池(一)
本篇文章主要介绍Android自带的线程池的使用. 首先要引入线程池的概念 线程池:是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务. 线程池线程都是后台线程.每个线 ...
- 二维码扫描利用ZBar实现
上次是根据系统的属性自己封装的一个二维码扫描,这次给大家介绍一下基于ZBar集成的类似于QQ二维码扫描界面的二维码扫描的效果. ...
- System占用端口80
可尝试如下结束System进程: 开始——设置——控制面板——管理工具——服务结束系统服务项:World Wide Web Publishing Service
- 奇怪的cab_xxxx_x文件
最近一段时间发现C盘老是提示空间紧张(显示为红色),之前清理了一次系统盘的\Windows\Temp文件夹,发现了很多文件名类似cab_xxxx_x的cab文件,大概占用了五六个G的空间,当时没太在意 ...