当前位置:网站首页>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());
}
}
}
边栏推荐
- Cesium service deployment, and import and display local 3dfiles data
- Wpf: solve the problem that materialdesign:dialoghost cannot be closed
- What is BFC?
- [usaco12mar]cows in a skyscraper g (state compression DP)
- Delete the last character of the string in golang
- Scite change background color
- Graphics_ Learnopongl learning notes
- [audio and video] ijkplayer error code
- 796 · 开锁
- UE4 source code reading_ Bone model and animation system_ Animation compression
猜你喜欢

MAE

jupyter远程服务器配置以及服务器开机自启

Introduction to Base64 coding

Minimap plug-in

Kwai 20200412 recruitment

C language - Introduction - essence Edition - take you into programming (I)

Display terrain database on osgearth ball

Haproxy+kept cluster setup 02

數據庫應用技術課程設計之商城管理系統

Jupyter remote server configuration and server startup
随机推荐
Introduction to Base64 coding
Golang string segmentation, substitution and interception
ArrayList
基于SSM的校园失物招领平台,源码,数据库脚本,项目导入运行视频教程,论文撰写教程
C course design employee information management system
[public key cryptography] ECC elliptic cryptosystem (implementing ElGamal encryption method)
KunlunBase MeetUP 等您来!
C语言-入门-精华版-带你走进编程(一)
Some understandings of 3dfiles
Multi traveling salesman problem -- overview of formula and solution process
Redis cluster series 4
Encoding and decoding of golang URL
go 解析身份证
Golang 字符串分割,替换和截取
Visual Studio (VS) shortcut keys
Graphics_ Games101/202 learning notes
Transmit pictures with Base64 encoding
Kwai 20200412 recruitment
Advanced OSG collision detection
[updating] wechat applet learning notes_ three