当前位置:网站首页>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());
}
}
}
边栏推荐
- Storage of data
- Unity change default editor
- UE4 source code reading_ Bone model and animation system_ Animation process
- Osgearth topographic shading map drawing
- Golang json格式和结构体相互转换
- Classes and objects
- Compilation error: "not in executable format: file format not recognized"“
- php-fpm软件的安装+openresty高速缓存搭建
- Graphics_ Games101/202 learning notes
- What does (+) in Oracle mean
猜你喜欢

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

Display terrain database on osgearth ball

简易入手《SOM神经网络》的本质与原理

Puhua PLM empowers the whole scene product lifecycle management and helps the enterprise digital transformation of the main line of products

Jupyter remote server configuration and server startup
![P1596 [USACO10OCT]Lake Counting S](/img/a7/07a84c93ee476788d9443c0add808b.png)
P1596 [USACO10OCT]Lake Counting S

Some understandings of 3dfiles

L'installateur a été installé avec une erreur inattendue

CLion-Toolchains are not configured Configure Disable profile问题解决

Thymeleaf 404 reports an error: there was unexpected error (type=not found, status=404)
随机推荐
Use filechannel to copy files
Ue5 opencv plug-in use
Basic operation and process control 2
redis集群系列四
How does unity fixedupdate call at a fixed frame rate
Golang json格式和结构体相互转换
C course design employee information management system
UE4 source code reading_ Bone model and animation system_ Animation process
Base64和Base64URL
Development material set
Visual Studio (VS) shortcut keys
C language - Introduction - essence Edition - take you into programming (I)
Introduction to hexadecimal coding
swagger文档配置
Explain sizeof, strlen, pointer, array and other combination questions in detail
2021-10-19
Cloudcompare learning (1) - cloudcompare compilation and common plug-in implementation
OpenGL learning notes
Golang's range
A tunnel to all ports of the server