private static void AddObjectKey(AnimationClip clip, EditorCurveBinding sourceBinding, SerializedProperty prop, double time) { if (prop.get_propertyType() == 5) { ObjectReferenceKeyframe[] array = null; AnimationClipCurveInfo curveInfo = AnimationClipCurveCache.Instance.GetCurveInfo(clip); int num = Array.IndexOf <EditorCurveBinding>(curveInfo.objectBindings, sourceBinding); if (num >= 0) { array = curveInfo.objectCurves[num]; int num2 = CurveEditUtility.EvaluateIndex(array, (float)time); if (CurveEditUtility.KeyCompare(array[num2].time, (float)time, clip.get_frameRate()) == 0) { array[num2].value = prop.get_objectReferenceValue(); } else if (num2 < array.Length - 1 && CurveEditUtility.KeyCompare(array[num2 + 1].time, (float)time, clip.get_frameRate()) == 0) { array[num2 + 1].value = prop.get_objectReferenceValue(); } else { if (time > (double)array[0].time) { num2++; } ArrayUtility.Insert <ObjectReferenceKeyframe>(ref array, num2, new ObjectReferenceKeyframe { time = (float)time, value = prop.get_objectReferenceValue() }); } } else { array = new ObjectReferenceKeyframe[1]; array[0].time = (float)time; array[0].value = prop.get_objectReferenceValue(); } AnimationUtility.SetObjectReferenceCurve(clip, sourceBinding, array); EditorUtility.SetDirty(clip); } }
public static Object Evaluate(ObjectReferenceKeyframe[] curve, float time) { return(curve[CurveEditUtility.EvaluateIndex(curve, time)].value); }