private void RefreshDic() { _dic.Clear(); EditorCurveBinding[] curveBinding = AnimationUtility.GetCurveBindings(Clip); foreach (var cb in curveBinding) { if (cb.propertyName.StartsWith("m_LocalPosition")) { AnimationCurveVector3 c; if (!_dic.TryGetValue(cb.path, out c)) { c = new AnimationCurveVector3(); _dic.Add(cb.path, c); } if (cb.propertyName.EndsWith(".x")) { c.X = AnimationUtility.GetEditorCurve(Clip, cb); } else if (cb.propertyName.EndsWith(".y")) { c.Y = AnimationUtility.GetEditorCurve(Clip, cb); } else if (cb.propertyName.EndsWith(".z")) { c.Z = AnimationUtility.GetEditorCurve(Clip, cb); } c.Length = Clip.length; } } }
private List <Vector3> Extract(AnimationCurveVector3 c, float length) { List <Vector3> result = new List <Vector3>(); int frameCount = (int)(length / Time.fixedDeltaTime); for (int i = 0; i < frameCount + 1; i++) { float time = i * Time.fixedDeltaTime; float x = c.X.Evaluate(time); float y = c.Y.Evaluate(time); float z = c.Y.Evaluate(time); result.Add(new Vector3(x, y, z)); } return(result); }