private void FixedUpdate()
        {
            if (currentFrame != null)
            {
                float sampleTimeX = currentFrame.motion.invertMotionSamplingX ? (1f - currentAnimationFrameProgress) : currentAnimationFrameProgress;
                float sampleTimeY = currentFrame.motion.invertMotionSamplingY ? (1f - currentAnimationFrameProgress) : currentAnimationFrameProgress;

                float rootMotionMultiplier = currentFrame.motion.motionMultiplier * Time.fixedDeltaTime / Engine.pixelsPerUnit;

                Vector3 delta = (Vector3)actor.TransformForwardX(new Vector2(currentFrame.motion.motionX.Evaluate(sampleTimeX), 0f));

                Vector3 targetPosition = transform.position + delta * rootMotionMultiplier;

                float flyDelta = currentFrame.motion.motionY.Evaluate(sampleTimeY) * rootMotionMultiplier;
                if (flyDelta == 0f)
                {
                    actor.flyingHeight = Mathf.MoveTowards(actor.flyingHeight, neutralHeight, Time.fixedDeltaTime * 16f);
                }

                actor.flyingHeight += flyDelta;
                spriteRenderer.transform.localPosition = new Vector3(0f, actor.flyingHeight, 0f);


                actor.MoveToCheckingCollision(targetPosition);



                if (currentFrame.dealsDamage)
                {
                    actor.HandleDamageFrame(currentFrame, targetsHitWithThisAnimation, frameChanged);
                }
                frameChanged = false;
            }
        }