public EditorCurveBinding[] GetAnimatorBindings(GameObject gameObject) { if (gameObject == null) { return(kEmptyArray); } Animator animator = gameObject.GetComponent <Animator>(); if (animator == null) { return(kEmptyArray); } AnimatorEntry entry = new AnimatorEntry() { animatorID = animator.GetInstanceID(), applyRootMotion = animator.applyRootMotion, humanoid = animator.isHuman }; EditorCurveBinding[] result = null; if (m_AnimatorCache.TryGetValue(entry, out result)) { return(result); } result = AnimationMode.GetAnimatorBindings(animator.gameObject); m_AnimatorCache[entry] = result; return(result); }
public EditorCurveBinding[] GetAnimatorBindings(GameObject gameObject) { if (gameObject == null) { return(kEmptyArray); } Animator animator = gameObject.GetComponent <Animator>(); if (animator == null) { return(kEmptyArray); } AnimatorEntry entry = new AnimatorEntry() { animatorID = animator.GetInstanceID(), applyRootMotion = animator.applyRootMotion, humanoid = animator.isHuman }; EditorCurveBinding[] result = null; if (m_AnimatorCache.TryGetValue(entry, out result)) { return(result); } s_BindingScratchPad.Clear(); // Replacement for AnimationMode.GetAnimatorBinding - this is faster and allocates kB instead of MB var transforms = animator.GetComponentsInChildren <Transform>(); foreach (var t in transforms) { if (animator.IsBoneTransform(t)) { s_BindingScratchPad.Add(EditorCurveBinding.FloatCurve(AnimationUtility.CalculateTransformPath(t, animator.transform), typeof(Transform), TRPlaceHolder)); } } var streamBindings = AnimationUtility.GetAnimationStreamBindings(animator.gameObject); UpdateTransformBindings(streamBindings); s_BindingScratchPad.AddRange(streamBindings); result = new EditorCurveBinding[s_BindingScratchPad.Count]; s_BindingScratchPad.CopyTo(result); m_AnimatorCache[entry] = result; return(result); }