Kick bool being blocked by Ground bool
Hi guys,
Here's the expected outcome in my 2D platformer:
Press kick on ground to launch a little off the ground and perform kick. Or;
Press kick while mid-jump and perform kick.
Both only allow one kick until grounded again (and eventually I'll add some end lag to the kick to prevent spam).
Actual outcome:
Kick Animations never transition. I see the Kick SetBool in the Animator turn on, before turning off the next frame. I suspect my GroundCheck() is firing again after Kick but before the kick transition can fire. If I comment the line in GroundCheck where I set the Kick bool to false, it works better, it just never switches off the bool so you can never do another kick.
I'm still very new to programming so please my apologies for the sloppy code. I feel like there's a simple way around this, I'm just not knowledgeable enough yet.
Thank you if you can provide some advice.
Here's the code I believe to be the problem: (the full code is here)
void FixedUpdate ()
{
GroundCheck ();
Run ();
RunningVelocity ();
anim.SetFloat ("vSpeed", rb.velocity.y);
}
private void GroundCheck ()
{
grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround);
anim.SetBool ("Ground", grounded);
if (grounded)
{
usedKick = false; // reset kick
usedDoubleJump = false; // reset double jump
anim.SetBool ("Kick", false); // set animator state
}
}
void Update ()
{
Jump ();
Kick ();
}
private void Kick ()
{
if ((!usedKick) && Input.GetButtonDown ("Fire3"))
{
if (grounded)
{
grounded = !grounded;
anim.SetBool ("Ground", false);
rb.AddForce (new Vector2 (0, jumpKickForce)); // add jump force
}
Debug.Log("test");
anim.SetBool("Kick",true); // set animation bool to true
// TODO keep x velocity by disabling movement (perhaps allow after touch)
usedKick = true; // prevent multiple kicks in single jump
//impact.Impact (); // Display impact effect
}
}
private void Jump ()
{
if ((grounded || !usedDoubleJump) && Input.GetButtonDown ("Fire1"))
{
anim.SetBool ("Ground", false); // Set animator variable
rb.AddForce (new Vector2 (0, jumpForce)); // Apply for to make character jump
if (!usedDoubleJump && !grounded)
{
usedDoubleJump = true; // now we've used our double jump
}
}
}
Your answer
Follow this Question
Related Questions
Survival shooter - Video 2 - Movement Animation Not Working 1 Answer
How to get quick animation transition variants on start? 0 Answers
Animation gets stuck halfway through (Unity 5) 2 Answers
Prevent Colliders animating between animation states or transition the colliders instantly 0 Answers
Transitioning between walking running idle animations with floats 0 Answers