- Home /
How can I improve 2D Jump? because it's sluggish
So, I made a 2D Game with separated Jump and Walk Scripts for my HTML5 Game which is a 2D Platformer, but it has a sluggish Jump. You can tell it especially in Test Levels 2 and 4, where the Camera moves according to the Player Movement. How can I improve this Code, so the Player Jumps immidiately rather than Floating a few Centimeters in the Air before Jumping?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerJumpV3 : MonoBehaviour {
public Rigidbody2D rb2d;
public float JumpForce;
public float MaxTime;
private float CurrentTime;
private bool Grounded;
public bool CanHoldJump;
// Use this for initialization
void Start () {
rb2d = GetComponent<Rigidbody2D>();
JumpForce = 30;
MaxTime = 0.25f;
CurrentTime = MaxTime;
Grounded = true;
CanHoldJump = true;
}
// Update is called once per frame
void Update () {
if (CanHoldJump == true)
{
if (CurrentTime >= 0)
{
rb2d.AddForce (new Vector2 (0, Input.GetAxis ("Jump")) * JumpForce * Time.deltaTime, ForceMode2D.Impulse);
CurrentTime -= Time.deltaTime;
}
}
else if (Grounded == false)
{
CanHoldJump = false;
}
if (Grounded == true)
{
CurrentTime = MaxTime;
}
}
private void OnCollisionStay2D(Collision2D collision)
{
if (collision.gameObject.tag == "Ground")
{
Grounded = true;
CanHoldJump = true;
}
}
private void OnCollisionExit2D(Collision2D collision)
{
if (collision.gameObject.tag == "Ground")
{
Grounded = false;
}
}
}
Answer by SlowCircuit · Jun 09, 2018 at 11:43 PM
When you're using an input axis with default settings and you press the key, it goes from 0 to 1 over time. Since jumps need to be immediate, you should either use a button/key for input or use GetAxisRaw which just tells you if it's -1, 0 or 1.