/// <summary> /// OnSceneGUI, draws repositionable handles at every point in the path, for easier setup /// </summary> protected virtual void OnSceneGUI() { Handles.color = Color.green; MMPath t = (target as MMPath); if (t.GetOriginalTransformPositionStatus() == false) { return; } for (int i = 0; i < t.PathElements.Count; i++) { EditorGUI.BeginChangeCheck(); Vector3 oldPoint = t.GetOriginalTransformPosition() + t.PathElements[i].PathElementPosition; GUIStyle style = new GUIStyle(); // draws the path item number style.normal.textColor = Color.yellow; Handles.Label(t.GetOriginalTransformPosition() + t.PathElements[i].PathElementPosition + (Vector3.down * 0.4f) + (Vector3.right * 0.4f), "" + i, style); // draws a movable handle Vector3 newPoint = Handles.FreeMoveHandle(oldPoint, Quaternion.identity, .5f, new Vector3(.25f, .25f, .25f), Handles.CircleHandleCap); newPoint = ApplyAxisLock(oldPoint, newPoint); // records changes if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(target, "Free Move Handle"); t.PathElements[i].PathElementPosition = newPoint - t.GetOriginalTransformPosition(); } } }
/// <summary> /// Locks handles movement on x, y, or z axis /// </summary> /// <param name="oldPoint"></param> /// <param name="newPoint"></param> /// <returns></returns> protected virtual Vector3 ApplyAxisLock(Vector3 oldPoint, Vector3 newPoint) { MMPath t = (target as MMPath); if (t.LockHandlesOnXAxis) { newPoint.x = oldPoint.x; } if (t.LockHandlesOnYAxis) { newPoint.y = oldPoint.y; } if (t.LockHandlesOnZAxis) { newPoint.z = oldPoint.z; } return(newPoint); }