pls help it wont let me jump some times or it doesnt let me jump at all,my jump isnt always working or it doesnt work at all i have no errors tho help

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour {

public CharacterController controller;

public float speed = 12f;
public float gravity = -9.81f;
public float jumpHeight = 3f;
 
public Transform GroundCheck;
public float groundDistance = 0.4f;
public LayerMask groundMask;

Vector3 velocity;
bool isGrounded;
  
// Update is called once per frame
void Update()
{

    isGrounded = Physics.CheckSphere(GroundCheck.position, groundDistance, groundMask);

    if (isGrounded && velocity.y < 0)
    {
        velocity.y = -2f;
    }

    float x = Input.GetAxis("Horizontal");
    float z = Input.GetAxis("Vertical");

    Vector3 move = transform.right * x + transform.forward * z;

    controller.Move(move * speed * Time.deltaTime);

    if (Input.GetButtonDown("Jump") && isGrounded)
    {
        velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
    }

    velocity.y += gravity * Time.deltaTime;

    controller.Move(velocity * Time.deltaTime);

}

}

Do all the objects that are considered ground have the layer set to the layer you chose for ground?

the same thing happened to me and i found that the reason was that if the movement is being called every frame then it causes to much stress on the rigidbody and doesnt jump so move the movement to another function:

void update() {
if (z != 0f || x != x) {
handleMovement();
}

// jump code
}

void handleMovement() {
Vector3 move = transform.right * x + transform.forward * z;
controller.Move(move * speed * Time.deltaTime);
}