/// <summary> /// Adds the keyframe to curve. /// </summary> /// <param name="animationCurve">Animation curve.</param> /// <param name="animatedClip">Animated clip.</param> /// <param name="binding">Binding.</param> /// <param name="value">Value.</param> /// <param name="type">Type.</param> /// <param name="time">Time.</param> public static void AddKeyframeToCurve(AnimationCurve animationCurve, AnimationClip animatedClip, EditorCurveBinding binding, float value, Type type, float time) { //frame comparing (frame=(int)(time*animatedClip.frameRate) int keyframeIndex = Array.FindIndex (animationCurve.keys, (itm) => (int)(itm.time * animatedClip.frameRate) == (int)(time * animatedClip.frameRate)); Keyframe key = default(Keyframe); if (keyframeIndex < 0) { if (type == typeof(bool) || type == typeof(float)) { key = new Keyframe (time, value); if (type == typeof(bool)) { //CurveUtility.SetKeyTangentMode (ref key, 0, TangentMode.Stepped); //CurveUtility.SetKeyTangentMode (ref key, 1, TangentMode.Stepped); //CurveUtility.SetKeyBroken (ref key, true); key.SetKeyTangentMode (0, TangentMode.Stepped); key.SetKeyTangentMode (1, TangentMode.Stepped); key.SetKeyBroken (true); } else { int num = animationCurve.AddKey (key); if (num != -1) { animationCurve.SetKeyModeFromContext (num); } } } } else { //??? maybe I should add new time too //animationCurve.keys[keyframeIndex].value=value; key = animationCurve.keys [keyframeIndex]; key.value = value; animationCurve.MoveKey (keyframeIndex, key); } //Save changes SaveCurve (animationCurve, animatedClip, binding); }