My double jump only works after I do a grounded jump. If I walk off a ledge the player just falls with no double jump.
How do I fix this?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
private Rigidbody2D rb;
private SpriteRenderer sprite;
private Animator anim;
private Collider2D coll;
private bool doubleJump;
private float dirX = 0f;
[SerializeField] private LayerMask jumpableGround;
[SerializeField] private float moveSpeed = 22f;
[SerializeField] private float jumpForce = 12f;
[SerializeField] private float doubleJumpingForce = 8f;
private enum MovementState {idle, running, jumping, falling}
private void Start()
{
rb = GetComponent<Rigidbody2D>();
sprite = GetComponent<SpriteRenderer>();
coll = GetComponent <BoxCollider2D>();
anim = GetComponent<Animator>();
}
private void Update()
{
dirX = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(dirX * moveSpeed, rb.velocity.y);
if (IsGrounded() && !Input.GetButton("Jump"))
{
doubleJump = false;
}
if (Input.GetButtonDown("Jump"))
{
if (IsGrounded() || doubleJump)
{
rb.velocity = new Vector2(rb.velocity.x, doubleJump ? doubleJumpingForce : jumpForce);
doubleJump = !doubleJump;
}
}
UpdateAnimationState();
}
private void UpdateAnimationState()
{
MovementState state;
if (dirX > 0f)
{
state = MovementState.running;
sprite.flipX = false;
}
else if (dirX < 0f)
{
state = MovementState.running;
sprite.flipX = true;
}
else
{
state = MovementState.idle;
}
if (rb.velocity.y > .1f)
{
state = MovementState.jumping;
}
else if (rb.velocity.y < -.1f)
{
state = MovementState.falling;
}
anim.SetInteger("state", (int)state);
}
private bool IsGrounded()
{
return Physics2D.BoxCast(coll.bounds.center, coll.bounds.size, 0f, Vector2.down, .1f, jumpableGround);
}
}