Fix for inconsistent jump height?

Basic TPS controller - when I jump whilst standing still, I jump at a consistently different height compared to when I a moving.

Ruled out issues with rigid.drag. One thing I have noticed is that the “y value” on rigid.velocity is fixed at -0.6 and decreases to another fixed amount. I cannot figure out what is causing this decrease and suspect it may be the issue. !

Attempting to set the y value to various different values proved unfruitful as most of the time it affected the jump since it is updated each frame and would be reset whenever moving.

public void FixedTick(float d)
        {
            delta = d;
            playerStates.jumpConfirmed = false;

            playerStates.onGround = onGround(); //must be before jump

            handleDrag();

            jump();

            movement();
            rotation();

            attack();

            detectCheck();
            Debug.Log(rigid.velocity);
        }

        void movement()
        {
            if (inputHandler.inputVariables.horizontal !=0 || inputHandler.inputVariables.vertical != 0)
            {
                float movementSpeed = 2;

                currentVelocity = rigid.velocity;

                targetVelocity = inputHandler.inputVariables.moveDirection * movementSpeed;

                velocityChange = 3;
                Vector3 vel = Vector3.Lerp(currentVelocity, targetVelocity, delta * velocityChange);

                rigid.velocity = vel;
              
            }
        }

public void jump()
        {
            if (playerStates.jumpInput && !playerStates.isCrouching)
            {
                checkForGround = false;
                playerStates.jumpConfirmed = true;

                rigid.drag = 0;
                rigid.velocity = new Vector3(rigid.velocity.x, 0, rigid.velocity.z);
                rigid.velocity += Vector3.up * playerValues.jumpHeight;
                jumpY += Vector3.up * playerValues.jumpHeight;
                StartCoroutine(pauseGroundCheck());
            }
        }

        IEnumerator pauseGroundCheck()
        {
            yield return new WaitForSeconds(.1f);
            Debug.Log("playerHeight" + rigid.worldCenterOfMass.y);
            checkForGround = true;
        }

        bool onGround()
        {
            if (checkForGround)
            {
                Vector3 origin = playerTransform.position;
                origin.y += 0.6f;
                Vector3 dir = -Vector3.up;
                float distToGround = 0.6f;

                RaycastHit hitGround;
                Debug.DrawRay(origin, dir, Color.green, distToGround);

                if (Physics.Raycast(origin, dir, out hitGround, distToGround, groundLayer))
                {
                    Vector3 tp = hitGround.point; //target position - where collision has occured
                    playerTransform.position = tp; //sets mTransform. position to the collision point
                    return true;
                }

                else
                {
                    return false;
                }
            }

            else
            {
                return false;
            }
        }

After hours of trial an error, it is thankfully a simple fix. I’m sure I tried this in various variations before but maybe it was incompatible.

I added the line below just before setting the RigidBody.velocity in my movement function to maintain the current y velocity. My understanding is still incomplete but it fixed my issue and might help someone else:

vel.y = rigid.velocity.y;