public override void OnInspectorGUI() { DrawDefaultInspector(); SplinerBase t = target as SplinerBase; Undo.RecordObject(t, "Spliner Edit"); GUILayout.Space(10); EditorGUILayout.LabelField("Add Segments", EditorStyles.boldLabel); if (GUILayout.Button("Add End Segment")) { t.AddNewEnd(); } if (GUILayout.Button("Add Start Segment")) { t.AddNewStart(); } GUILayout.Space(10); EditorGUILayout.LabelField("Flatten", EditorStyles.boldLabel); if (GUILayout.Button("Flatten X Axis")) { t.Flatten("X"); } if (GUILayout.Button("Flatten Y Axis")) { t.Flatten("Y"); } if (GUILayout.Button("Flatten Z Axis")) { t.Flatten("Z"); } GUILayout.Space(10); EditorGUILayout.LabelField("Clear", EditorStyles.boldLabel); if (GUILayout.Button("Clear All Segments")) { t.ResetAllSegments(); } }
void OnSceneGUI() { SplinerBase t = target as SplinerBase; // Adapted from http://catlikecoding.com/unity/tutorials/curves-and-splines/ handleTransform = t.transform; handleRotation = handleTransform.rotation; serializedObject.Update(); //Undo.RecordObject(t, "Spline Segment Edit"); EditorGUI.BeginChangeCheck(); index = 0; if (t.splineSegments != null) { // Index through and create handles for startPoint, startTangent, endPoint, endTangent for (int i = 0; i < t.splineSegments.Length; i++) { // Create handle for startPoint if (t.splineSegments[i].prev == null || !t.enforceContinuousSpline) { handlePos = t.splineSegments[i].Transformed(t.splineSegments[i].startPoint); //handlePos = Handles.PositionHandle(handlePos, Quaternion.identity); handlePos = DrawPoint(handlePos, index); t.splineSegments[i].startPoint = t.splineSegments[i].InverseTransformed(handlePos); //t.splineSegments[i].startPoint = Handles.PositionHandle(t.splineSegments[i].startPoint, Quaternion.identity); } else if (i >= 1) { t.splineSegments[i].startPoint = t.splineSegments[i - 1].endPoint; } index++; } for (int i = 0; i < t.splineSegments.Length; i++) { // Create handle for startTangent if (t.splineSegments[i].prev == null || !t.autoAlignTangents) { //handlePos = t.splineSegments[i].Transformed(t.splineSegments[i].startTangent); //handlePos = Handles.PositionHandle(handlePos, Quaternion.identity); handlePos = DrawPoint(handlePos, index); //t.splineSegments[i].startTangent = t.splineSegments[i].InverseTransformed(handlePos); //t.splineSegments[i].startTangent = Handles.PositionHandle(t.splineSegments[i].startTangent, Quaternion.identity); } else if (i >= 1) { t.splineSegments[i].startTangent = t.splineSegments[i - 1].endTangent; } index++; } for (int i = 0; i < t.splineSegments.Length; i++) { // Create handle for endPoint handlePos = t.splineSegments[i].Transformed(t.splineSegments[i].endPoint); //handlePos = Handles.PositionHandle(handlePos, Quaternion.identity); handlePos = DrawPoint(handlePos, index); t.splineSegments[i].endPoint = t.splineSegments[i].InverseTransformed(handlePos); index++; } for (int i = 0; i < t.splineSegments.Length; i++) { //t.splineSegments[i].endPoint = Handles.PositionHandle(t.splineSegments[i].endPoint, Quaternion.identity); // Create handle for endTangent handlePos = t.splineSegments[i].Transformed(t.splineSegments[i].endTangent); //handlePos = Handles.PositionHandle(handlePos, Quaternion.identity); handlePos = DrawPoint(handlePos, index); t.splineSegments[i].endTangent = t.splineSegments[i].InverseTransformed(handlePos); //t.splineSegments[i].endTangent = Handles.PositionHandle(t.splineSegments[i].endTangent, Quaternion.identity); index++; } } //EditorUtility.SetDirty(t); serializedObject.ApplyModifiedProperties(); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(t, "Spline Segment Edit"); } }