Example #1
0
        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);
        }