Why can i jump forever

Hi, i have a problem with my code it makes it so if you hold down jump you just go up can anyone help?
(this is my code)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovment : 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”))
{
velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
}

velocity.y += gravity * Time.deltaTime;

controller.Move(velocity * Time.deltaTime);

}
}

You should only be able to Jump when you are grounded, I guess.

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

And you should use Code-Tags :wink:

2 Likes

The reason you can jump forever is likely related to this code coming from defective Unity example code. I surmise this because the .Move() method is called twice in one frame, which is a no-no.

I’ve written about this so many times but this time I’m going to tag @MelvMay so perhaps the bad documentation might eventually get fixed. See link below.

I wrote about this before: the Unity example code in the API no longer jumps reliably.

I reported it to Unity via their docs feedback in October 2020. Apparently it is still broken:

Here is a work-around:

I recommend you also go to that same documentation page and ALSO report that the code is broken.

When you report it, you are welcome to link the above workaround. One day the docs might get fixed.

If you would prefer something more full-featured here is a super-basic starter prototype FPS based on Character Controller (BasicFPCC):

That one has run, walk, jump, slide, crouch… it’s crazy-nutty!!

Unfortunately that’s 3D physics so not related to me: Someone such as @yant could comment.

1 Like

Thank you for the help

this is the best solution, checking the player if he is grounded + checking the jump button.