private static void RemoveFloatKey(AnimationClip clip, EditorCurveBinding sourceBind, SerializedProperty prop, double time) { List <AnimationCurve> list = new List <AnimationCurve>(); List <EditorCurveBinding> list2 = new List <EditorCurveBinding>(); AnimationClipCurveInfo curveInfo = AnimationClipCurveCache.Instance.GetCurveInfo(clip); for (int i = 0; i < curveInfo.bindings.Length; i++) { EditorCurveBinding item = curveInfo.bindings[i]; if (item.get_type() == sourceBind.get_type()) { SerializedProperty serializedProperty = null; AnimationCurve animationCurve = curveInfo.curves[i]; if (prop.get_propertyPath().Equals(item.propertyName)) { serializedProperty = prop; } else if (item.propertyName.Contains(prop.get_propertyPath())) { serializedProperty = prop.get_serializedObject().FindProperty(item.propertyName); } if (serializedProperty != null) { CurveEditUtility.RemoveKeyFrameFromCurve(animationCurve, (float)time, clip.get_frameRate()); list.Add(animationCurve); list2.Add(item); } } } CurveEditUtility.UpdateEditorCurves(clip, list2, list); }
private static void RemoveRotationKey(AnimationClip clip, EditorCurveBinding sourceBind, SerializedProperty prop, double time) { if (prop.get_propertyType() == 17) { List <AnimationCurve> list = new List <AnimationCurve>(); List <EditorCurveBinding> list2 = new List <EditorCurveBinding>(); AnimationClipCurveInfo curveInfo = AnimationClipCurveCache.Instance.GetCurveInfo(clip); for (int i = 0; i < curveInfo.bindings.Length; i++) { if (sourceBind.get_type() == curveInfo.bindings[i].get_type()) { if (curveInfo.bindings[i].propertyName.Contains("localEuler")) { list2.Add(curveInfo.bindings[i]); list.Add(curveInfo.curves[i]); } } } foreach (AnimationCurve current in list) { CurveEditUtility.RemoveKeyFrameFromCurve(current, (float)time, clip.get_frameRate()); } CurveEditUtility.UpdateEditorCurves(clip, list2, list); } }
public static void RemoveKey(UnityEngine.Object target, IEnumerable <PropertyModification> modifications, WindowState state) { AnimationClip clip; double keyTime; bool inRange; if (!GetClipAndRelativeTime(target, state, out clip, out keyTime, out inRange) || !inRange) { return; } var refreshPreview = false; TimelineUndo.PushUndo(clip, "Remove Key"); foreach (var mod in modifications) { EditorCurveBinding temp; if (HasBinding(target, mod, clip, out temp)) { if (temp.isPPtrCurve) { CurveEditUtility.RemoveObjectKey(clip, temp, keyTime); if (CurveEditUtility.GetObjectKeyCount(clip, temp) == 0) { refreshPreview = true; } } else { AnimationCurve curve = AnimationUtility.GetEditorCurve(clip, temp); if (curve != null) { CurveEditUtility.RemoveKeyFrameFromCurve(curve, (float)keyTime, clip.frameRate); AnimationUtility.SetEditorCurve(clip, temp, curve); if (curve.length == 0) { AnimationUtility.SetEditorCurve(clip, temp, null); refreshPreview = true; } } } } } if (refreshPreview) { state.ResetPreviewMode(); } }