private void FixedUpdate()
        {
            float speed;

            if (!RotateMode)
            {
                GetInput(out speed);
                // always move along the camera forward as it is the direction that it being aimed at
                Vector3 desiredMove = transform.forward * input.y + transform.right * input.x;

                // get a normal for the surface that is being touched to move along it
                RaycastHit hitInfo;
                Physics.SphereCast(transform.position, CharacterController.radius, Vector3.down, out hitInfo,
                                   CharacterController.height / 2f, Physics.DefaultRaycastLayers, QueryTriggerInteraction.Ignore);
                desiredMove = Vector3.ProjectOnPlane(desiredMove, hitInfo.normal).normalized;

                MoveDir.x = desiredMove.x * speed;
                MoveDir.z = desiredMove.z * speed;
            }
            else
            {
                Holding.Adjust(CrossPlatformInputManager.GetAxisRaw("Horizontal"),
                               CrossPlatformInputManager.GetAxisRaw("Vertical"),
                               CrossPlatformInputManager.GetAxisRaw("VerticalRotate"));
                speed     = 0;
                MoveDir.x = 0;
                MoveDir.z = 0;
            }
            if (CharacterController.isGrounded)
            {
                MoveDir.y = -StickToGroundForce;

                if (Jump)
                {
                    MoveDir.y = JumpSpeed;
                    PlayJumpSound();
                    Jump    = false;
                    Jumping = true;
                }
            }
            else
            {
                MoveDir += Physics.gravity * GravityMultiplier * Time.fixedDeltaTime;
            }
            CollisionFlags = CharacterController.Move(MoveDir * Time.fixedDeltaTime);
            if (Holding != null)
            {
                WalkSpeed = Holding.Follow(transform.position) ? 1f : OriginalSpeed;
                if ((Holding.myCollider.ClosestPoint(Camera.transform.position) - Camera.transform.position).magnitude >= holdingDistance)
                {
                    WalkSpeed = OriginalSpeed;
                    overlayEffect.DropEffect(Holding.LetGo());
                    Holding    = null;
                    RotateMode = false;
                    print("Dropped");
                }
            }

            ProgressStepCycle(speed);
            UpdateCameraPosition(speed);

            MouseLook.UpdateCursorLock();
        }