im trying to make a double jump but its combining the jumps into one at once and idk how to fix it

im trying to make a double jump its not letting me click the second time and instead makes my player go flying with double the force

public float MoveSpeed = 3;
private Rigidbody PlayerRB;
public float JumpForce = 10;
public float GravMod = 2; 
private float JumpDelay = 0.07f;
private float TimeStamp;
public bool IsOnGround = false;
public bool HasDoubleJump;
public bool AllowedDoubleJump;
// Start is called before the first frame update
void Start()
{
    PlayerRB = GetComponent<Rigidbody>();
    Physics.gravity *= GravMod;
}

// Update is called once per frame
void Update()
{
    //Basic movement using wasd
    if (Input.GetKey(KeyCode.A))
    {
        transform.Translate(MoveSpeed * Time.deltaTime * Vector3.left);
    }
    if (Input.GetKey(KeyCode.D))
    {
        transform.Translate(MoveSpeed * Time.deltaTime * Vector3.right);
    }

    if ((IsOnGround == true) && Time.time >= TimeStamp && Input.GetKey(KeyCode.Space))
    {
        //Jump code
        if (HasDoubleJump == true && AllowedDoubleJump == true)
        {
            PlayerRB.AddForce(Vector3.up * JumpForce, ForceMode.Impulse);
            AllowedDoubleJump = false;
            TimeStamp = Time.time + JumpDelay;
            
            if (Input.GetKey(KeyCode.Space))
            {
                PlayerRB.AddForce(Vector3.up * JumpForce, ForceMode.Impulse);
                Debug.Log("Second Jump");
                
            }
        }
        else if (HasDoubleJump == false)
        {
            PlayerRB.AddForce(Vector3.up * JumpForce, ForceMode.Impulse);
            IsOnGround = false;
            TimeStamp = Time.time + JumpDelay;
        }
    }
}

private void OnCollisionEnter(Collision col)
{
    if (col.gameObject.CompareTag("Ground"))
    {
        IsOnGround = true;
        TimeStamp = Time.time + JumpDelay;
        AllowedDoubleJump = true;
    }
}

}

Hi @thelegend25123


Could you try changing all the Input.GetKey(KeyCode.Space) to Input.GetKeyDown(KeyCode.Space). Now the game registers a space for every frame you’re holding space (a frame is very short, so a small tap could already be causing the ultra jump) and that will be changed when he only registers the button coming down.


I hope this works, let me know :slight_smile: