Tanoda
CUIBezierCurveEditor.cs
Go to the documentation of this file.
1
3
4using UnityEditor;
5
7{
8 [CustomEditor(typeof(CUIBezierCurve))]
9 [CanEditMultipleObjects]
10 public class CUIBezierCurveEditor : Editor
11 {
12 public override void OnInspectorGUI()
13 {
14 DrawDefaultInspector();
15 }
16
17 protected void OnSceneGUI()
18 {
19 CUIBezierCurve script = (CUIBezierCurve)this.target;
20
21 if (script.ControlPoints != null)
22 {
23 Vector3[] controlPoints = script.ControlPoints;
24
25 Transform handleTransform = script.transform;
26 Quaternion handleRotation = script.transform.rotation;
27
28 for (int p = 0; p < CUIBezierCurve.CubicBezierCurvePtNum; p++)
29 {
30 EditorGUI.BeginChangeCheck();
31 Vector3 newPt = Handles.DoPositionHandle(handleTransform.TransformPoint(controlPoints[p]), handleRotation);
32 if (EditorGUI.EndChangeCheck())
33 {
34
35 Undo.RecordObject(script, "Move Point");
36 EditorUtility.SetDirty(script);
37 controlPoints[p] = handleTransform.InverseTransformPoint(newPt);
38 script.Refresh();
39 }
40 }
41
42 Handles.color = Color.gray;
43 Handles.DrawLine(handleTransform.TransformPoint(controlPoints[0]), handleTransform.TransformPoint(controlPoints[1]));
44 Handles.DrawLine(handleTransform.TransformPoint(controlPoints[1]), handleTransform.TransformPoint(controlPoints[2]));
45 Handles.DrawLine(handleTransform.TransformPoint(controlPoints[2]), handleTransform.TransformPoint(controlPoints[3]));
46
47 int sampleSize = 10;
48
49 Handles.color = Color.white;
50 for (int s = 0; s < sampleSize; s++)
51 {
52 Handles.DrawLine(handleTransform.TransformPoint(script.GetPoint((float)s / sampleSize)), handleTransform.TransformPoint(script.GetPoint((float)(s + 1) / sampleSize)));
53 }
54
55 script.EDITOR_ControlPoints = controlPoints;
56 }
57 }
58 }
59}
UnityEngine.Color Color
Definition: TestScript.cs:32
Assume to be a cubic bezier curve at the moment.
Vector3 GetPoint(float _time)
call this to get a sample
Credit Erdener Gonenc - @PixelEnvision.