CompressedAnimationDirver getDirver(Animator animator)
        {
            CompressedAnimationDirver dirver = animator.GetComponent <CompressedAnimationDirver>();

            if (!dirver)
            {
                dirver = animator.gameObject.AddComponent <CompressedAnimationDirver>();
            }
            return(dirver);
        }
        // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
        //override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
        //{

        //    if (clip)
        //    {
        //        clip.SampleAnimation(animator.gameObject, stateInfo.normalizedTime);
        //    }
        //}

        //OnStateExit is called when a transition ends and the state machine finishes evaluating this state
        override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
        {
            CompressedAnimationDirver dirver = getDirver(animator);

            dirver.DoStateLayerExit(animator, ref stateInfo);
            //dirver.DoStateEnter(stateInfo, getClip());
            //var runner = animator.GetComponent<Animation>();
            //if (runner)
            //{
            //    runner.Stop(clip.name);
            //    //最后采样一次,确保最终状态正确
            //    clip.SampleAnimation(animator.gameObject, clip.length);

            //}
        }
        //OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
        override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
        {
            CompressedAnimationDirver dirver = getDirver(animator);

            dirver.DoStateLayerEnter(animator, ref stateInfo);
        }