当前位置:网站首页>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());
}
}
}
边栏推荐
- 【云原生】微服务之Feign的介绍与使用
- A tunnel to all ports of the server
- Multi traveling salesman problem -- overview of formula and solution process
- MySQL 8
- Mall management system of database application technology course design
- Three characteristics
- KunlunBase MeetUP 等您来!
- 796 · 开锁
- Golang 字符串分割,替换和截取
- [cloud native] introduction and use of feign of microservices
猜你喜欢

C#课程设计之员工信息管理系统

Jupyter remote server configuration and server startup

Gradle's method of dynamically modifying APK package name

数据分析练习题

Transfinite hacker cognition

Cloudcompare learning (1) - cloudcompare compilation and common plug-in implementation
![[cloud native] introduction and use of feign of microservices](/img/39/05cf7673155954c90e75a8a2eecd96.jpg)
[cloud native] introduction and use of feign of microservices

Thymeleaf 404 reports an error: there was unexpected error (type=not found, status=404)

Introduction to Base64 coding

Basic operation and process control
随机推荐
GIS实战应用案例100篇(七十八)-多规合一数据库设计及数据入库
matlab神經網絡所有傳遞函數(激活函數)公式詳解
Redis data structure
LinkList
Wpf: solve the problem that materialdesign:dialoghost cannot be closed
About Wireshark's unsuccessful installation of npcap
P2622 light off problem II (state compression search)
Multi traveling salesman problem -- overview of formula and solution process
【更新中】微信小程序学习笔记_3
[cloud native] introduction and use of feign of microservices
Golang的range
matlab神经网络所有传递函数(激活函数)公式详解
Exe file running window embedding QT window
Cloudcompare learning (1) - cloudcompare compilation and common plug-in implementation
animation
Osganimation library parsing
MXone Pro自适应2.0影视模板西瓜视频主题苹果cmsV10模板
Mysql容器化(1)Docker安装MySQL
Graphics_ Learnopongl learning notes
Introduction to Base64 coding