Unity编辑器 - DragAndDrop拖拽控件

Unity编辑器的拖拽(DragAndDrop)在网上能找到的资料少,自己稍微研究了一下,写了个相对完整的案例,效果如下

代码:

object dragData = "dragData";
Vector2 offset;
Color col = new Color(1, 0, 0, 0.6f);
Rect rect1 = new Rect(20, 10, 100, 20);
Rect rect2 = new Rect(20, 60, 100, 20);
Rect drect;
bool isDraging;
int cid; private void OnGUI() {
GUI.Box(rect1, "rect1");
GUI.Box(rect2, "rect2"); Event e = Event.current;
cid = GUIUtility.GetControlID(FocusType.Passive);
switch (e.GetTypeForControl(cid)) {
case EventType.MouseDown:
if (rect1.Contains(e.mousePosition))
GUIUtility.hotControl = cid;
break;
case EventType.MouseUp:
if (GUIUtility.hotControl == cid)
GUIUtility.hotControl = 0;
break;
case EventType.MouseDrag:
Debug.Log("MouseDrag");
if (GUIUtility.hotControl == cid && rect1.Contains(e.mousePosition)) {
DragAndDrop.PrepareStartDrag();
//DragAndDrop.objectReferences = new Object[] { };
DragAndDrop.SetGenericData("dragflag", dragData);
DragAndDrop.StartDrag("dragtitle");
offset = e.mousePosition - rect1.position;
drect = rect1;
isDraging = true;
e.Use();
}
break;
case EventType.DragUpdated:
Debug.Log("DragUpdated");
drect.position = e.mousePosition - offset;
if (rect2.Contains(e.mousePosition)) {
DragAndDrop.visualMode = DragAndDropVisualMode.Generic;
drect = rect2;
}
e.Use();
break;
case EventType.DragPerform:
Debug.Log("DragPerform");
DragAndDrop.AcceptDrag();
Debug.Log("DragPerform : " + DragAndDrop.GetGenericData("dragflag"));
e.Use();
break;
case EventType.DragExited:
Debug.Log("DragExited");
isDraging = false;
if (GUIUtility.hotControl == cid)
GUIUtility.hotControl = 0;
e.Use();
break;
} if (isDraging) {
EditorGUI.DrawRect(drect, col);
}
}

事件调用顺序

Unity编辑器 - DragAndDrop拖拽控件的更多相关文章

  1. 【C#/WPF】GridSplitter 分割布局,拖拽控件分隔栏以改变控件尺寸

    需求:界面由多部分控件组成,想要拖拽控件之间的分隔栏以改变尺寸. MainWindow.xaml: <Grid> <Grid.ColumnDefinitions> <Co ...

  2. Unity编辑器 - 鼠标悬停在控件上时改变鼠标样式

    Unity编辑器 - 鼠标悬停在控件上时改变鼠标样式 摘自Unity文档 EditorGUIUtility.AddCursorRect public static void AddCursorRect ...

  3. Unity编辑器 - 使用GL绘制控件

    Unity编辑器 - 使用GL绘制控件 控件较为复杂时,可能造成界面卡顿,在EditorGUI中也可以灵活使用GL绘制来提升性能. 以绘制线段为例: using UnityEngine; using ...

  4. flutter Draggable Widget拖拽控件

    Draggable Widget Draggable控件负责就是拖拽,父层使用了Draggable,它的子元素就是可以拖动的,子元素可以实容器,可以是图片.用起来非常的灵活. 参数说明: data: ...

  5. Flutter 拖拽控件Draggable

    Flutter提供了强大的拖拽控件,可以灵活定制,并且非常简单.下面作一个拖拽的案例. Draggable Widget Draggable控件负责就是拖拽,父层使用了Draggable,它的子元素就 ...

  6. ios-将代码创建的视图控件放入拖拽控件的下面

    如图所示 图片是拖拽上去的imageView,橘黄色控件是在代码中创建的添加上去的,此时黄色view在imageView 上方 调用方法bringSubviewToFront:试图将imageView ...

  7. H5实现多图片预览上传,可点击可拖拽控件介绍

    版权声明:欢迎转载,请注明出处:http://blog.csdn.net/weixin_36380516 在做图片上传时发现一个蛮好用的控件,支持多张图片同时上传,可以点击选择图片,也可以将图片拖拽到 ...

  8. Flutter 拖拽控件Draggable看这一篇就够了

    注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 Draggable系列组件可以让我们拖动组件. Dragg ...

  9. 拖拽控件java版

    Button vv = new Button("vvvv");  DragSource.getDefaultDragSource().createDefaultDragGestur ...

随机推荐

  1. PAT——1013. 数素数

    令Pi表示第i个素数.现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数. 输入格式: 输入在一行中给出M和N,其间以空格分隔. 输出格式: 输出从PM到PN的所有素数 ...

  2. 解决SVN UUID客户端和服务器不一致的问题

    下面是从别的文章中COPY过来的两篇文章,可以完美的解决这个问题: 一. 重新定位SVN的时候,遇到uuid不一致的问题. Google得知可以使用以下命令 有到svnadmin命令:(位于 SVN安 ...

  3. center os 7 修改 mysql 密码

    笔记 本redis 密码 654321忘记密码:修改密码update user set authentication_string=password('123456') where user='roo ...

  4. java判断类型

    判断是否String:str.getClass().getName().equals("java.lang.String") 判断是否在且不为空:Object.hasKey(&qu ...

  5. SQL SERVER 对权限的授予GRANT、拒绝DENY、收回REVOKE

    -----对用户member授权,允许其具有对数据表person的更新和删除的操作权限:GRANT UPDATE,DELETE ON personTO member WITH GRANT OPTION ...

  6. IoC和AOP扩展

    一.构造注入 二.使用p命名空间注入属性值 三.注入不同数据类型 <?xml version="1.0" encoding="UTF-8"?> &l ...

  7. angular常用属性大全

    Angular元素属性大全 addClass()-为每个匹配的元素添加指定的样式类名 after()-在匹配元素集合中的每个元素后面插入参数所指定的内容,作为其兄弟节点 append()-在每个匹配元 ...

  8. jQuery 常用核心方法

    jQuery 常用核心方法 .each() 遍历一个jQuery对象,为每个匹配元素执行一个函数 $('p').each(function(idx,node){ $(node).text(idx + ...

  9. 爬取豆瓣电影Top250

    1 import json import requests from requests.exceptions import RequestException import re import time ...

  10. vi模式下的编辑、删除、保存和退出

    vi + 文件名:进入 vi 模式 编辑模式:shift+: 退出编辑模式:Esc 退出编辑模式后可进行光标的上下左右移动(偶尔会出现ABCD,还不知道怎么解决,目前只能出来一个删除一个) 光标处:按 ...