I have Implemented a Wall Jump system, but the problem is; Sometimes only the X value of the wall Jump is aplicated, apparently, making it a ‘Wall fall’…
For The code, I have implemented this:
public bool isWalljumping;
private float wallJumpingDirection;
private float wallJumpingTime = 0.1f;
private float wallJumpingCounter;
private float wallJumpingDuration = 0.4f;
private Vector2 wallJumpingPower = new Vector2(12f, 16f);
private void WallJump()
{
if (isWallslidin)
{
isWalljumping = false;
wallJumpingDirection = -transform.localScale.x;
wallJumpingCounter = wallJumpingTime;
CancelInvoke(nameof(StopWallJumping));
}
else
{
wallJumpingCounter -= Time.deltaTime;
}
if(Input.GetButtonDown("Jump") && wallJumpingCounter > 0f)
{
isWalljumping = true;
body.velocity = new Vector2(wallJumpingDirection * wallJumpingPower.x, wallJumpingDirection * wallJumpingPower.y);
wallJumpingCounter = 0f;
if(transform.localScale.x != wallJumpingDirection)
{
isfacingRight = !isfacingRight;
Vector3 localscale = transform.localScale;
localscale.x *= -1f;
transform.localScale = localscale;
}
Invoke(nameof(StopWallJumping), wallJumpingDuration);
}
}
private void StopWallJumping()
{
isWalljumping = false;
}
Here is a video of what is happening (only the last wall jump happened correctly as I expected)