- Home /
counter doesnt work in update
I have a simple code that makes my character jump,
My character can jump as long as he's current jump is lower than the maxNumber of jumps.
and every time he jumps i add 1 to his current jump.
my problem is the jump counter doesnt always add one? even when the character jumps, he jumps with no problems but the counter doesnt always respond.
he is allowed to jump twice, but from time to time the player does hes first jump without anything being added to his current jump.
// Jumping
public int maxNoJumps = 2;
public int currentJumpNo = 0;
public bool canPlayerJump = false;
public float JumpVelocity = 25;
void Update ()
{
grounded = Physics2D.Linecast (transform.position, groundCheck.position, 1 << LayerMask.NameToLayer ("Ground"));
if (grounded)
{
currentJumpNo = 0;
}
// SETTING IF PLAYER IS ABLE TO JUMP
if (currentJumpNo < maxNoJumps)
{
canPlayerJump = true;
} else
{
canPlayerJump = false;
}
// IF PLAYER PRESSES SPACE AND IS ABLE TO JUMP
if (Input.GetKeyDown (KeyCode.Space) && canPlayerJump)
{
currentJumpNo+=1;
rb2d.velocity = new Vector2 (rb2d.velocity.x, JumpVelocity);
}
like i said the player jumps even when the counter doesnt go up allowing him sometimes to jump 3 times.
also i have tried it in fixed update and it's still the same and incrementing in different ways.
thank in advance for helping
Answer by WCA · Jun 11, 2015 at 09:07 AM
Hi rodney. Your problem is that he can jump 3 times but your maxNoJumps = 2 right?
My guess is because of the raycast. When you first jump, your jump counter is still 0 because the raycast is still hitting the ground. it begins incrementing after it stops hitting it. Try to draw your raycast and check.
Sorry it's been a while but yes this was the problem, I simply moved the ground check up closer to the player and then created a time check function to check like 0.2 seconds after the player jumps to make sure he was on the right current jump number. $$anonymous$$any thanks for answering though
Answer by Ricewind1 · Jun 11, 2015 at 04:49 AM
My guess is that 'grounded' keeps becoming true, thus the counter is rest to 0 every time. Either use the game's own .isGrounded function or
function IsGrounded(): boolean { return Physics.Raycast(transform.position, -Vector3.up, distToGround + 0.1); }
Your answer
Follow this Question
Related Questions
Problem with animation and void fixedupdate() 1 Answer
2D physics jump issue. 1 Answer
Proper item carry by player respecting physics (collisions) 2 Answers
Not registering input when checking input in Update and using input in FixedUpdate 1 Answer
FixedUpdate limits: consistant 0.01 s on mobile devices? 1 Answer