当前位置:网站首页>Unity editor expansion - draw lines
Unity editor expansion - draw lines
2022-07-03 08:27:00 【T.D.C】
Draw lines
- Use Handles Class to draw various lines
design sketch
The sample code
using UnityEditor;
using UnityEngine;
namespace DC.DCIMGUIBox
{
public class DrawLineWindow : EditorWindow
{
[MenuItem("DC/IMGUI/DrawLineWindow")]
public static void Open()
{
var window = GetWindow<DrawLineWindow>();
window.minSize = new Vector2(800, 600);
}
public Vector3 startPos = new Vector3();
public Vector3 endPos = new Vector3(500, 100);
public Vector3 startTangent = new Vector3(20, 0);
public Vector3 endTangent;
public Vector3 startPos2 = new Vector3();
public Vector3 endPos2 = new Vector3(500, 100);
public Vector3 startTangent2 = new Vector3(20, 0);
public Vector3 endTangent2;
public bool lineA = true;
public bool lineB = true;
public void OnGUI()
{
GUILayout.Label("red line");
startPos = CustomControls.Float3Field("start",startPos);
endPos = CustomControls.Float3Field("end", endPos);
startTangent = CustomControls.Float3Field("startTangent", startTangent);
endTangent = CustomControls.Float3Field("endTangent", endTangent);
GUILayout.Space(20);
GUILayout.Label("green line");
startPos2 = CustomControls.Float3Field(startPos2);
endPos2 = CustomControls.Float3Field(endPos2);
startTangent2 = CustomControls.Float3Field(startTangent2);
endTangent2 = CustomControls.Float3Field(endTangent2);
GUILayout.Space(20);
GUILayout.BeginHorizontal();
lineA = GUILayout.Toggle(lineA, "draw red", GUILayout.Width(100));
lineB = GUILayout.Toggle(lineB, "draw green", GUILayout.Width(100));
GUILayout.EndHorizontal();
if(lineA)
Handles.DrawBezier(startPos, endPos, startTangent, endTangent, Color.red, CustomControls.texture2d, 1);
if(lineB)
Handles.DrawBezier(startPos2, endPos2, startTangent2, endTangent2, Color.green, CustomControls.texture2d, 1);
}
}
}
The library files
using UnityEditor;
using UnityEngine;
namespace DC.DCIMGUIBox
{
public class CustomControls
{
public static Texture2D texture2d = new Texture2D(1,1);
public static Vector3 Float3Field(string ctrlName, Vector3 input, params GUILayoutOption[] options)
{
EditorGUILayout.BeginHorizontal();
GUILayout.Label(ctrlName);
input.x = EditorGUILayout.FloatField(input.x, options);
input.y = EditorGUILayout.FloatField(input.y, options);
input.z = EditorGUILayout.FloatField(input.z, options);
EditorGUILayout.EndHorizontal();
return input;
}
public static Vector3 Float3Field(Vector3 input, params GUILayoutOption[] options)
{
EditorGUILayout.BeginHorizontal();
input.x = EditorGUILayout.FloatField(input.x, options);
input.y = EditorGUILayout.FloatField(input.y, options);
input.z = EditorGUILayout.FloatField(input.z, options);
EditorGUILayout.EndHorizontal();
return input;
}
public static Vector4 Float4Field(Vector4 input, string ctrlName, params GUILayoutOption[] options)
{
EditorGUILayout.BeginHorizontal();
GUILayout.Label(ctrlName);
input.x = EditorGUILayout.FloatField(input.x, options);
input.y = EditorGUILayout.FloatField(input.y, options);
input.z = EditorGUILayout.FloatField(input.z, options);
input.w = EditorGUILayout.FloatField(input.w, options);
EditorGUILayout.EndHorizontal();
return input;
}
public static Vector4 Float4Field(string ctrlName, Vector4 input, params GUILayoutOption[] options)
{
EditorGUILayout.BeginHorizontal();
GUILayout.Label(ctrlName);
input.x = EditorGUILayout.FloatField(input.x, options);
input.y = EditorGUILayout.FloatField(input.y, options);
input.z = EditorGUILayout.FloatField(input.z, options);
input.w = EditorGUILayout.FloatField(input.w, options);
EditorGUILayout.EndHorizontal();
return input;
}
}
}
边栏推荐
- swagger文档配置
- E: Unable to locate package ROS melody desktop full
- Abstract classes and interfaces
- Golang time format sorting
- 使用base64编码传图片
- P1896 [scoi2005] non aggression (shape pressure DP)
- Golang 时间格式整理
- C语言-入门-精华版-带你走进编程(一)
- [audio and video] ijkplayer error code
- Cloudcompare learning (1) - cloudcompare compilation and common plug-in implementation
猜你喜欢
Explain sizeof, strlen, pointer, array and other combination questions in detail
UE4 source code reading_ Bone model and animation system_ Animation process
[cloud native] introduction and use of feign of microservices
About Wireshark's unsuccessful installation of npcap
Storage of data
图像处理8-CNN图像分类
Image processing 8-cnn image classification
Oracle insert single quotation mark
Kunlunbase meetup is waiting for you!
Base64 and base64url
随机推荐
Scite change background color
[cloud native] introduction and use of feign of microservices
Basic operation and process control
梯度下降法求解BP神经网络的简单Demo
Golang's range
Creation and content of mapnode -- osgearth rendering engine series (2)
C#课程设计之员工信息管理系统
简易入手《SOM神经网络》的本质与原理
Use filechannel to copy files
Flex flexible box layout
详解sizeof、strlen、指针和数组等组合题
796 · 开锁
About Wireshark's unsuccessful installation of npcap
Minimap plug-in
Go resolve ID card
[public key cryptography] ECC elliptic cryptosystem (implementing ElGamal encryption method)
Clion toolchains are not configured configure disable profile problem solving
[linear table] basic operation of bidirectional linked list specify node exchange
Unity4.3.1 engine source code compilation process
What is BFC?