public int GetNumFrames(int animationID)
        {
            if (m_Animations == null || animationID >= m_Animations.Length)
            {
                return(0);
            }

            var animation = m_Animations[animationID];

            if (animation.clip == null)
            {
                return(0);
            }

            var curves = AnimationUtility.GetObjectReferenceCurveBindings(animation.clip);

            for (int i = 0; i < curves.Length; i++)
            {
                if (AnimClipUtils.CheckSpriteCurve(curves[i]))
                {
                    var keyframes = AnimationUtility.GetObjectReferenceCurve(animation.clip, curves[i]);

                    return(keyframes.Length);
                }
            }

            Debug.LogWarning("No sprite keyframes have been found in the current animation.");

            return(0);
        }
        void RepairFrameData()
        {
            var length = m_targetManager.GetNumFrames(SelectedAnimation);
            var diff   = length - m_targetManager.m_Animations[SelectedAnimation].frameData.Length;

            if (diff != 0)
            {
                var list = new List <HitboxAnimationFrame>(m_targetManager.m_Animations[SelectedAnimation].frameData);

                while (diff < 0)
                {
                    list.RemoveAt(list.Count - 1);
                    diff++;
                }

                while (diff > 0)
                {
                    list.Add(new HitboxAnimationFrame {
                        collider = new HitboxColliderData[0], events = new HitboxFrameEventData[0]
                    });
                    diff--;
                }

                m_targetManager.m_Animations[SelectedAnimation].frameData = list.ToArray();
            }
            else
            {
                EditorCurveBinding[] curves = AnimationUtility.GetObjectReferenceCurveBindings(m_targetManager.m_Animations[SelectedAnimation].clip);

                for (int i = 0; i < curves.Length; i++)
                {
                    if (AnimClipUtils.CheckSpriteCurve(curves[i]))
                    {
                        var keyframes = AnimationUtility.GetObjectReferenceCurve(m_targetManager.m_Animations[SelectedAnimation].clip, curves[i]);

                        for (int j = 0; j < m_targetManager.m_Animations[SelectedAnimation].frameData.Length && j < keyframes.Length; j++)
                        {
                            m_targetManager.m_Animations[SelectedAnimation].frameData[j].time = keyframes[j].time;
                        }
                    }
                }
            }
        }