#pragma warning disable 612, 618 //for handles. will fix protected void DoParameterPositionHandle(AnimatedParameter animParam, TransformSpace space) { UnityEditor.EditorGUI.BeginChangeCheck(); var originalPos = (Vector3)animParam.GetCurrentValue(); var pos = TransformPoint(originalPos, space); var newPos = UnityEditor.Handles.PositionHandle(pos, Quaternion.identity); newPos = InverseTransformPoint(newPos, space); UnityEditor.Handles.SphereCap(-10, pos, Quaternion.identity, 0.1f); if (UnityEditor.EditorGUI.EndChangeCheck()) { UnityEditor.Undo.RecordObject(this, "Position Change"); if (RootTimeWithinRange()) { if (!Event.current.shift) { animParam.SetCurrentValue(newPos); } else { animParam.OffsetValue(newPos - originalPos); } } else { animParam.SetCurrentValue(newPos); animParam.OffsetValue(newPos - originalPos); } UnityEditor.EditorUtility.SetDirty(this); } }
///In SceneGUI, shows a position handle for target parameter of target keyable public static bool DoParameterPositionHandle(IKeyable keyable, AnimatedParameter animParam, TransformSpace space) { var originalPos = (Vector3)animParam.GetCurrentValueAsObject(); var newPos = originalPos; if (DoVectorPositionHandle(keyable, space, ref newPos)) { if (keyable.IsRootTimeWithinClip()) { if (!Event.current.shift) { animParam.SetCurrentValue(newPos); } else { animParam.OffsetValue(newPos - originalPos); } } else { animParam.SetCurrentValue(newPos); animParam.OffsetValue(newPos - originalPos); } EditorUtility.SetDirty(keyable as Object); return(true); } return(false); }