public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
        {
            animal         = animator.GetComponent <Animal>();
            BehaviourSpeed = animal.flySpeed;

            if (Speed_Param != string.Empty)
            {
                SpeedHash = Animator.StringToHash(Speed_Param);
                animator.SetFloat(SpeedHash, AnimSpeedDefault);
            }

            CurrentSpeedMultiplier = AnimSpeedDefault;
        }
        ///─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
        /// <summary>
        /// Add more Speed to the current Move animations
        /// </summary>
        protected virtual void AdditionalSpeed(float time)
        {
            currentSpeed = new Speeds(1);                                                    //Resets the Speeds IMPORTANT (BUG Catched by Jonathan MACK)
            if (hasUnderwater && underwater && CurrentAnimState == AnimTag.Underwater)
            {
                currentSpeed = underWaterSpeed;
            }
            else if (hasSwim && swim && CurrentAnimState == AnimTag.Swim)
            {
                currentSpeed = swimSpeed;                                                                                                  //Change values to Swim
            }
            else if (hasFly && fly && CurrentAnimState == AnimTag.Fly)
            {
                currentSpeed = flySpeed;                                                                                                //Change values to Fly
            }
            else if (IsJumping || fall || CurrentAnimState == AnimTag.Fall)
            {
                currentSpeed = new Speeds(1);
            }
            else if (Speed3 || (Speed2 && Shift))
            {
                currentSpeed = runSpeed;
            }
            else if (Speed2 || (Speed1 && Shift))
            {
                currentSpeed = trotSpeed;
            }
            else if (Speed1)
            {
                currentSpeed = walkSpeed;
            }

            if (vertical < 0)
            {
                currentSpeed.position = walkSpeed.position;                    //If is going backwards use the WalkSpeed
            }
            currentSpeed.position = currentSpeed.position * ScaleFactor;

            Vector3 forward = T_Forward * vertical;

            if (forward.magnitude > 1)
            {
                forward.Normalize();
            }

            DeltaPosition += forward * currentSpeed.position / 5f * time;

            Anim.speed = Mathf.Lerp(Anim.speed, currentSpeed.animator * animatorSpeed, time * currentSpeed.lerpAnimator);               //Changue the velocity of the animator
            //Debug.Log("AnimSpeed: "+ Anim.speed + "| Lerp:" + currentSpeed.lerpAnimator + "| CurrentAnim:" + currentSpeed.animator);
        }
        // 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)
        {
            rb     = animator.GetComponent <Rigidbody>();
            animal = animator.GetComponent <Animal>();

            animator.applyRootMotion = true;

            transform     = animator.transform;                                                         //Save the Transform on a local variable
            DeltaRotation = transform.rotation;                                                         //Save the Horizontal Rotation

            rb.constraints = RigidbodyConstraints.FreezeRotation;
            rb.useGravity  = false;


            Default_UseShift = animal.useShift;
            animal.useShift  = false;

            WaterLayer     = LayerMask.GetMask("Water");
            BehaviourSpeed = animal.underWaterSpeed;
        }
        // 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)
        {
            ResetAllValues();

            rb     = animator.GetComponent <Rigidbody>();
            animal = animator.GetComponent <Animal>();

            animal.RootMotion = true;

            transform = animator.transform;                                                             //Save the Transform on a local variable

            rb.constraints = RigidbodyConstraints.FreezeRotation;
            rb.useGravity  = false;


            Default_UseShift = animal.UseShift;
            animal.UseShift  = false;

            WaterLayer = LayerMask.GetMask("Water");
            Speed      = animal.underWaterSpeed;
        }