Infinite Jumping.

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 = 2f;
    public Transform groundCheck;
    public float groundDistance = 0.4f;
    public LayerMask groundMask;

    Vector3 velocity;
    bool isGrounded;


    void Update ()
    {


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

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

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


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

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

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

        velocity.y += Gravity * Time.deltaTime;

        controller.Move(velocity * Time.deltaTime);


    }


}

You should ask a question. You said “Infinite Jumping”.

This script looks pretty weird to me. The last three lines look very redundant, and it’s pretty bizarre you’re multiplying so many different things by deltaTime, more than once. Have you tried just looking in the Standard Assets character controller for an example of how to move a character around?

Yes, infinite jumping indeed.