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);
     }
 }
Пример #3
0
        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();
            }
        }