- Home /
Why does my character jump higher sometimes?
I have two ways to control the jump of my character. One is using the "up" key and the otherone is clicking in a button i have in a canvas. With the first one the bug doesn't show up but with the second it does. I dont know why. It just jumps higher like if it was doing a double or a triple jump. This bug ocurs when jumping and colliding with a wall but sometimes it just happens when jumping from the normal ground.
My code:
public class NinjaController : MonoBehaviour
{
public static NinjaController ninja;
public bool canJump=true;
public int points;
private bool stopped=false, afterJump=true;
private float prevJumpY;
void Start()
{
points = 0;
ninja = this;
}
// Update is called once per frame
void Update()
{
if((afterJump&&(transform.position.y-prevJumpY)>0.185f)||transform.position.y<=prevJumpY) //Stops "going forward force" until reaches certain high
{
afterJump = false;
stopped = false;
prevJumpY = -999999999;
}
if(!stopped)
{
gameObject.GetComponent<Animator>().SetBool("Stopped", false);
gameObject.transform.Translate(1.5f * Time.deltaTime, 0, 0);
}else
{
gameObject.GetComponent<Animator>().SetBool("Stopped", true);
}
Quaternion rotation = new Quaternion();
gameObject.transform.rotation = rotation;
if (canJump&&Input.GetKeyDown("up")) //Using this the bug doesn't show up
{
jump();
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.transform.tag == "Ground")
{
canJump = true;
}
if(collision.transform.tag=="Wall")
{
canJump = true;
stopped = true;
}
if(collision.transform.tag=="Top")
{
canJump = false;
}
if (collision.transform.tag == "Lava")
{
if (PlayerPrefs.HasKey("HighScore"))
{
if(PlayerPrefs.GetInt("HighScore") <points)
{
PlayerPrefs.SetInt("HighScore", points);
}
}
else
{
PlayerPrefs.SetInt("HighScore", points);
}
SceneManager.LoadScene("MainMenu");
Destroy(gameObject);
}
if (collision.transform.tag == "Coin")
points++;
}
public void jump()
{
prevJumpY = transform.position.y;
canJump = false;
afterJump = true;
gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, 395));
}
public Vector3 CameraFollower()
{
Vector3 pos = new Vector3(gameObject.transform.position.x, gameObject.transform.position.y, -10);
return pos;
}
public Vector3 whereIsPlayerFull()
{
return gameObject.transform.position;
}
}
The button code:
public class JumpButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
private bool pressed = false;
private void Update()
{
if (NinjaController.ninja != null)
if (NinjaController.ninja.canJump && pressed)
{
NinjaController.ninja.jump();
}
}
public void OnPointerDown(PointerEventData eventData)
{
pressed = true;
}
public void OnPointerUp(PointerEventData eventData)
{
pressed = false;
}
}
Answer by kylecat6330 · Jul 03, 2020 at 03:24 PM
I have had a similar issue at one point or another. The best way I found to fix it is to clamp the y velocity.
Add a Debug.Log(gameObject.GetComponent<Rigidbody2D>().velocity.y);
to your script so that you can determine what the velocity should be versus the velocity when it bugs. Decide on what you want your maximum y velocity to be and then add this to the end of your update function.
gameObject.GetComponent<Rigidbody2D>().velocity = new Vector2(gameObject.GetComponent<Rigidbody2D>().velocity.x, Mathf.Clamp(gameObject.GetComponent<Rigidbody2D>().velocity.y, -MaxVelocity, MaxVelocity));
Your answer
Follow this Question
Related Questions
Programmatically add rigidbody2d 2 Answers
How can I make two objects with rigid bodies that won't displace each other? 2 Answers
How to create a solid object in the canvas? 0 Answers
rigidbody2D : X velocity is slowed down when I jump. 1 Answer
How can I increase or decrease jump speed while keeping the jump arc the same? 1 Answer