- 1 static List TrimScaleKeyframes(AnimationClipCurveData curve) 2 {
- 3 List keyframes = __keyframes;
- 4 float maxValue,
- minValue,
- averageValue;
- 5 keyframes.Clear();
- 6 List samples = TakeSamples(curve, out maxValue, out minValue, out averageValue);
- 7 int depth = curve.propertyName.Split('/').Length;
- 8
- var kcount = samples.Count;
- 9 keyframes.Add(samples[0].keyframe);
- 10 bool lastIsRemoved = false;
- 11 Keyframe lastKeyframe = new Keyframe();
- 12
- var epsilon = m_scaleError;
- 13 float error = 0;
- 14
- for (int k = 1; k < kcount - 1; ++k) 15 {
- 16
- var kf = samples[k].keyframe;
- 17
- var diff = samples[k].pos.y - keyframes[keyframes.Count - 1].value;
- 18 error += diff;
- 19
- if (Mathf.Abs(error) > epsilon) 20 {
- 21
- if (lastIsRemoved) 22 {
- 23 keyframes.Add(lastKeyframe);
- 24 lastIsRemoved = false;
- 25
- }
- 26 keyframes.Add(kf);
- 27 error = 0;
- 28
- }
- 29
- else 30 {
- 31 lastIsRemoved = true;
- 32 lastKeyframe = kf;
- 33
- }
- 34
- }
- 35 keyframes.Add(samples[kcount - 1].keyframe);
- 36
- if (keyframes.Count == 2) 37 {
- 38
- if (Math.Abs(keyframes[0].value - keyframes[1].value) < Mathf.Abs(m_positionError)) 39 {
- 40 keyframes[0] = KeyframeUtil.GetNew(keyframes[0].time, keyframes[0].value, TangentMode.Linear, TangentMode.Linear);
- 41 keyframes[1] = KeyframeUtil.GetNew(keyframes[1].time, keyframes[1].value, TangentMode.Linear, TangentMode.Linear);
- 42
- }
- 43
- }
- 44
- return keyframes;
- 45
- }
来源: http://www.cnblogs.com/fishyu/p/6978322.html