- Home /
Need help fixing my double jump script.
I am trying to create a doublejump to the character controller. It works just fine, but if I walk off a platform, that counts as 1 of my 2 jumps. How can I fix this?
void FixedUpdate()
{
// The player is grounded if a circlecast to the groundcheck position hits anything designated as ground
grounded = Physics2D.OverlapCircle(groundCheck.position, groundedRadius, whatIsGround);
anim.SetBool("Ground", grounded);
// Set the vertical animation
anim.SetFloat("vSpeed", rigidbody2D.velocity.y);
//Reset DoubleJump
if (grounded)
{
doubleJump = false;
}
}
public void Move(float move, bool crouch, bool jump)
{
// If crouching, check to see if the character can stand up
if(!crouch && anim.GetBool("Crouch"))
{
// If the character has a ceiling preventing them from standing up, keep them crouching
if( Physics2D.OverlapCircle(ceilingCheck.position, ceilingRadius, whatIsGround))
crouch = true;
}
// Set whether or not the character is crouching in the animator
anim.SetBool("Crouch", crouch);
//only control the player if grounded or airControl is turned on
if(grounded || airControl)
{
// Reduce the speed if crouching by the crouchSpeed multiplier
move = (crouch ? move * crouchSpeed : move);
// The Speed animator parameter is set to the absolute value of the horizontal input.
anim.SetFloat("Speed", Mathf.Abs(move));
// Move the character
rigidbody2D.velocity = new Vector2(move * maxSpeed, rigidbody2D.velocity.y);
// If the input is moving the player right and the player is facing left...
if(move > 0 && !facingRight)
// ... flip the player.
Flip();
// Otherwise if the input is moving the player left and the player is facing right...
else if(move < 0 && facingRight)
// ... flip the player.
Flip();
}
// If the player should jump...
if ((grounded || !doubleJump) && jump) {
// Add a vertical force to the player.
anim.SetBool("Ground", false);
//zero out our current velocity
rigidbody2D.velocity = new Vector2(rigidbody2D.velocity.x, 0);
rigidbody2D.AddForce(new Vector2(0f, jumpForce));
if(!grounded && doubleJump == false)
{
doubleJump = true;
}
}
}
Answer by jokim · Aug 19, 2014 at 12:26 PM
It's because when you walk off a platform, you aren't grounded anymore. What you can do is implement a jump counter. and allow the player to jump as long as the counter didn't reach 2. (which means ignoring the grounded boolean).
int jumpCount = 0;
if (jumpCount < 2 && jump)
{
//Jump
jumpCount++;
}
Also, don't forget to reset the jump count in the fixed Update when the player hits the ground.
void FixedUpdate()
{
//your code...
if (grounded)
{
jumpCount = 0;
}
}
Well I tried that and it was giving me 3 jumps if i was grounded, and 2 if i walked off the platform. So pretty much the same issue for some reason. I tried editing it but its still not working. This is what I ended up with
if (grounded && jumpCount < 1 && jump)
{
jumpCount++;
anim.SetBool("Ground", false);
rigidbody2D.velocity = new Vector2(rigidbody2D.velocity.x, 0);
rigidbody2D.AddForce(new Vector2(0f, jumpForce));
}
else if (jumpCount < 2 && jump)
{
jumpCount++;
anim.SetBool("Ground", false);
rigidbody2D.velocity = new Vector2(rigidbody2D.velocity.x, 0);
rigidbody2D.AddForce(new Vector2(0f, jumpForce));
}
I think i figured it out. I believe you put my code within the same function, which isn't really what i meant.
The grounded part needs to be in the fixed update, nowhere else. I'll edit my answer to better reflect that.
Sorry for the ambiguity, and tell me if that works
Your answer
Follow this Question
Related Questions
I need help with adding double jump to my player movement script 0 Answers
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Booleans are not working 1 Answer
Illuminating a 3D object's edges OnMouseOver (script in c#)? 1 Answer