- Home /
Differentiate jump and moving up slope
So I have a 2D character that can jump and walk horizontally.
I check if it's on the ground by doing a BoxCast2D below it's feet.
I have platforms that use PlatformEffectors2D so character can jump through them from below.
The first issue was that, grounded was resetting when jumping through those platforms allowing me to jump an additional time. This was not intended, so I decided to check if velocity.y is greater than zero, that would mean the character is still during jump so he should not become grounded.
This created an issue with slopes. When character is climbing up slope, the velocity.y is also greater than zero so he is not grounded and cannot jump (which should be possible).
I'm looking for ideas to differentiate those two behaviors. Here is some of my code to check grounded:
private void FixedUpdate()
{
bool wasGrounded = grounded;
if (autoMove)
Move(speed);
Vector2 velocity = thisRigidbody2D.velocity;
if (transform.position.y <= minVerticalPosition)
{
CharacterLanded(wasGrounded);
transform.position = transform.position.WithY(minVerticalPosition);
if (velocity.y < 0)
thisRigidbody2D.velocity = velocity.WithY(0);
}
else if (velocity.y > 0)
{
int i = Physics2D.OverlapBoxNonAlloc(groundCheck.position, groundedRectangle, 0, groundCheckCollisions, whatIsGround);
if (i > 0 && groundCheckCollisions.Any(c => c && c.gameObject != gameObject))
{
CharacterLanded(wasGrounded);
}
else
{
grounded = false;
}
}
else
{
grounded = false;
}
}
private void CharacterLanded(bool wasGrounded)
{
if (wasGrounded)
return;
grounded = true;
numberOfJumps = 0;
Landed?.Invoke();
}
Your answer
Follow this Question
Related Questions
Unity Character Controller jumps instantly 0 Answers
Can't jump while sprinting 1 Answer
Maintaining forward momentum and control while jumping with character controller 3 Answers
How to instantiate on collision a Jump event with Standard FPS controller? 1 Answer
CharacterController - moving while jumping (movement vector values reset?) 1 Answer