Tanoda
BezierLineRendererEditor.cs
Go to the documentation of this file.
1
3
4using UnityEditor;
5
7{
8 [CustomEditor(typeof(UILineRenderer))]
9 public class BezierLineRendererEditor : Editor
10 {
11 void OnSceneGUI()
12 {
13 UILineRenderer curveRenderer = target as UILineRenderer;
14
15 if (!curveRenderer || curveRenderer.drivenExternally || curveRenderer.Points == null || curveRenderer.Points.Length < 2)
16 {
17 return;
18 }
19
20 var oldMatrix = Handles.matrix;
21 var transform = curveRenderer.GetComponent<RectTransform>();
22 //Pivot must be 0,0 to edit
23 //transform.pivot = Vector2.zero;
24 Handles.matrix = transform.localToWorldMatrix;
25
26 var sizeX = curveRenderer.rectTransform.rect.width;
27 var sizeY = curveRenderer.rectTransform.rect.height;
28 var offsetX = -curveRenderer.rectTransform.pivot.x * sizeX;
29 var offsetY = -curveRenderer.rectTransform.pivot.y * sizeY;
30
31 Vector2[] points = new Vector2[curveRenderer.Points.Length];
32 for (int i = 0; i < curveRenderer.Points.Length; i++)
33 {
34 points[i] = curveRenderer.Points[i];
35 }
36
37 //Need to transform points to worldspace! when set to Relative
38 if (curveRenderer.RelativeSize)
39 {
40 for (int i = 0; i < points.Length; i++)
41 {
42 points[i] = new Vector2(points[i].x * sizeX + offsetX, points[i].y * sizeY + offsetY);
43 }
44 }
45
46 for (int i = 0; i < points.Length - 1; i += 2)
47 {
48 Handles.DrawLine(points[i], points[i + 1]);
49 }
50
51 for (int i = 0; i < points.Length; ++i)
52 {
53 using (var check = new EditorGUI.ChangeCheckScope())
54 {
55 var p = Handles.PositionHandle(points[i], Quaternion.identity);
56
57 if (check.changed)
58 {
59 Undo.RecordObject(curveRenderer, "Changed Curve Position");
60 if (curveRenderer.RelativeSize)
61 {
62 curveRenderer.Points[i] = new Vector2((p.x - offsetX) / sizeX, (p.y - offsetY) / sizeY);
63 }
64 else
65 {
66 curveRenderer.Points[i] = p;
67 }
68 curveRenderer.transform.gameObject.SetActive(false);
69 curveRenderer.transform.gameObject.SetActive(true);
70 }
71 }
72 }
73
74 Handles.matrix = oldMatrix;
75 }
76 }
77}
Vector2[] Points
Points to be drawn in the line.
Credit Erdener Gonenc - @PixelEnvision.