当前位置:网站首页>Unity Editor Extension - drag and drop
Unity Editor Extension - drag and drop
2022-07-03 08:27:00 【T.D.C】
Drag and drop
- 2 Methods
- Use ChildWindow
- Custom control processing mouse drag event processing completes the change of control position
design sketch
- Click on add Create subwindow
- After selecting the window, link the currently selected window with the previously selected window with a line

This paper introduces the use of ChildWindow The drag and drop
using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
namespace DC.DCIMGUIBox
{
public class WindowNodeData
{
public Rect rect;
public bool selected;
}
public class DragWindow : EditorWindow
{
[MenuItem("DC/IMGUI/DragWindow")]
public static void Open()
{
var window = GetWindow<DragWindow>();
window.minSize = new Vector2(800, 600);
}
public List<WindowNodeData> nodeDataList = new List<WindowNodeData>();
List<Tuple<WindowNodeData, WindowNodeData>> lines = new List<Tuple<WindowNodeData, WindowNodeData>>();
private WindowNodeData lastSelectedWindow = null;
public void OnGUI()
{
GUILayout.BeginHorizontal();
if (GUILayout.Button("add"))
{
nodeDataList.Add(new WindowNodeData() {rect = new Rect(100, 100, 200, 100)});
}
GUILayout.EndHorizontal();
var col = new Color(0.8f, 0.3f, 0.3f);
for (int i = 0; i < lines.Count; i++)
{
var line = lines[i];
var startPos = line.Item1.rect.center;
var endPos = line.Item2.rect.center;
DrawConnectLine(new Vector3(startPos.x, startPos.y), new Vector3(endPos.x, endPos.y), col);
}
BeginWindows();
for (int i = 0; i < nodeDataList.Count; i++)
{
nodeDataList[i].rect = GUILayout.Window(i, nodeDataList[i].rect, WindowNode, i.ToString());
}
EndWindows();
}
public static void DrawConnectLine(Vector3 startPos, Vector3 endPos, Color color)
{
var startTangent = new Vector3(startPos.x + Mathf.Sign(endPos.x - startPos.x) * 10, startPos.y, startPos.z);
var endTangent = new Vector3(endPos.x + Mathf.Sign(endPos.y - startPos.y) * 10, endPos.y, endPos.z);
Handles.DrawBezier(startPos, endPos, startTangent, endTangent, color, CustomControls.texture2d, 1);
}
public void OnNodeSelected(WindowNodeData data)
{
for (int i = 0; i < nodeDataList.Count; i++)
{
if (nodeDataList[i] == data)
{
continue;
}
nodeDataList[i].selected = false;
}
Repaint();
if (lastSelectedWindow != null)
{
lines.Add(new Tuple<WindowNodeData, WindowNodeData>(lastSelectedWindow, data));
}
lastSelectedWindow = data;
}
public void WindowNode(int windowId)
{
var data = nodeDataList[windowId];
GUI.DragWindow(new Rect(0, 0, data.rect.width, 16));
var curEvt = Event.current;
if (curEvt.type == EventType.MouseDown && curEvt.button == 0 &&
new Rect(0, 16, data.rect.width, data.rect.height - 16).Contains(curEvt.mousePosition))
{
data.selected = true;
OnNodeSelected(data);
}
if (data.selected)
{
EditorGUI.DrawRect(new Rect(0, 0, data.rect.width, data.rect.height), new Color(0.6f, 0, 0.4f, 0.3f));
}
GUILayout.Label(windowId.ToString());
}
}
}
边栏推荐
- Data analysis exercises
- Jupyter remote server configuration and server startup
- Kwai 20200412 recruitment
- Exe file running window embedding QT window
- CLion-Toolchains are not configured Configure Disable profile问题解决
- redis集群系列四
- Unity change default editor
- 796 · 开锁
- 100 GIS practical application cases (78) - Multi compliance database design and data warehousing
- Use filechannel to copy files
猜你喜欢

MySQL 8

Transplantation of freetype Library

Easy touch plug-in

php-fpm软件的安装+openresty高速缓存搭建

Advanced OSG collision detection

Transfinite hacker cognition

Cloudcompare learning (1) - cloudcompare compilation and common plug-in implementation

Redis data structure

the installer has encountered an unexpected error installing this package

Animation_ IK overview
随机推荐
Graphics_ Learnopongl learning notes
[usaco12mar]cows in a skyscraper g (state compression DP)
Intersectionpicker in osgearth
Oracle insert single quotation mark
Notes on understanding applets 2022/7/3
Graphics_ Games101/202 learning notes
Redis data structure
matlab神經網絡所有傳遞函數(激活函數)公式詳解
Encoding and decoding of golang URL
Redis的数据结构
Gradle's method of dynamically modifying APK package name
十六进制编码简介
MXone Pro自适应2.0影视模板西瓜视频主题苹果cmsV10模板
【云原生】微服务之Feign的介绍与使用
A tunnel to all ports of the server
Editor Extensions
Use filechannel to copy files
數據庫應用技術課程設計之商城管理系統
Markdown directory generation
Transplantation of freetype Library