public static void AddKeyFrameToCurve(AnimationCurve curve, float time, float framerate, float value, bool stepped)
        {
            Keyframe keyframe = default(Keyframe);
            bool     flag     = true;
            int      num      = CurveEditUtility.GetKeyframeAtTime(curve, time, framerate);

            if (num != -1)
            {
                flag     = false;
                keyframe = curve.get_Item(num);
                curve.RemoveKey(num);
            }
            keyframe.set_value(value);
            keyframe.set_time(CurveEditUtility.GetKeyTime(time, framerate));
            num = curve.AddKey(keyframe);
            if (stepped)
            {
                AnimationUtility.SetKeyBroken(curve, num, stepped);
                AnimationUtility.SetKeyLeftTangentMode(curve, num, 3);
                AnimationUtility.SetKeyRightTangentMode(curve, num, 3);
                keyframe.set_outTangent(float.PositiveInfinity);
                keyframe.set_inTangent(float.PositiveInfinity);
            }
            else if (flag)
            {
                AnimationUtility.SetKeyLeftTangentMode(curve, num, 4);
                AnimationUtility.SetKeyRightTangentMode(curve, num, 4);
            }
            if (num != -1 && !stepped)
            {
                AnimationUtility.UpdateTangentsFromModeSurrounding(curve, num);
                AnimationUtility.SetKeyBroken(curve, num, false);
            }
        }
        public static bool RemoveKeyFrameFromCurve(AnimationCurve curve, float time, float framerate)
        {
            int  keyframeAtTime = CurveEditUtility.GetKeyframeAtTime(curve, time, framerate);
            bool result;

            if (keyframeAtTime == -1)
            {
                result = false;
            }
            else
            {
                curve.RemoveKey(keyframeAtTime);
                result = true;
            }
            return(result);
        }
        public static void RemoveObjectKey(AnimationClip clip, EditorCurveBinding sourceBinding, double time)
        {
            AnimationClipCurveInfo curveInfo = AnimationClipCurveCache.Instance.GetCurveInfo(clip);
            int num = Array.IndexOf <EditorCurveBinding>(curveInfo.objectBindings, sourceBinding);

            if (num >= 0)
            {
                ObjectReferenceKeyframe[] array = curveInfo.objectCurves[num];
                int keyframeAtTime = CurveEditUtility.GetKeyframeAtTime(array, (float)time, clip.get_frameRate());
                if (keyframeAtTime >= 0)
                {
                    ArrayUtility.RemoveAt <ObjectReferenceKeyframe>(ref array, keyframeAtTime);
                    AnimationUtility.SetObjectReferenceCurve(clip, sourceBinding, array);
                    EditorUtility.SetDirty(clip);
                }
            }
        }