How to fix walljumping from the same wall
Hey, i'm new to Unity and i have started doing a 2D platformer. I wanted to add a walljump mechanic, and everything worked fine, but instead of jumping form one wall to the second, the player could just kind of slide up the wall. Does someone know how to prevent this and only let the player walljump as intended? Thanks, here's my code.
using UnityEngine;
public class PlayerMovementScript : MonoBehaviour { [Header("Object References")] public Rigidbody2D rb;
[Header("Horizontal Movement")]
public float moveSpeed = 10f;
[Header("Vertical Movement")]
public float jumpForce = 10f;
[Header("Grounded")]
public Transform groundCheck;
public LayerMask groundLayer;
public float groundRadius = 0.2f;
bool isGrounded = false;
[Header("Wall Jump")]
public float wallJumpTime = 0.2f;
public float wallSlideSpeed = 0.3f;
public float wallDistance = 0.5f;
bool isWallSliding = false;
RaycastHit2D WallCheckHit;
float jumpTime;
float mx = 0f;
bool isFacingRight = true;
void Update()
{
if (isGrounded && Input.GetButtonDown("Jump") || isWallSliding && Input.GetButtonDown("Jump"))
{
Jump();
}
}
void FixedUpdate()
{
mx = Input.GetAxis("Horizontal");
if (mx < 0)
{
isFacingRight = false;
transform.localScale = new Vector2(-1, transform.localScale.y);
}
else
{
isFacingRight = true;
transform.localScale = new Vector2(1, transform.localScale.y);
}
rb.velocity = new Vector2(mx * moveSpeed, rb.velocity.y);
bool touchingGround = Physics2D.OverlapCircle(groundCheck.position, groundRadius, groundLayer);
if (touchingGround)
{
isGrounded = true;
jumpTime = Time.time + wallJumpTime;
}
else if (jumpTime < Time.time)
{
isGrounded = false;
}
if (isFacingRight)
{
WallCheckHit = Physics2D.Raycast(transform.position, new Vector2(wallDistance, 0), wallDistance, groundLayer);
}
else
{
WallCheckHit = Physics2D.Raycast(transform.position, new Vector2(-wallDistance, 0), wallDistance, groundLayer);
}
if (WallCheckHit && !isGrounded && mx != 0)
{
isWallSliding = true;
jumpTime = Time.time + wallJumpTime;
}
else if (jumpTime < Time.time)
{
isWallSliding = false;
}
if (isWallSliding)
{
rb.velocity = new Vector2(rb.velocity.x, Mathf.Clamp(rb.velocity.y, wallSlideSpeed, float.MaxValue));
}
}
void Jump()
{
rb.velocity = new Vector2(rb.velocity.x, jumpForce);
}
}
I'm sorry if it's messy, like i said, i'm new to Unity ( I've started like a week ago and i'm trying to do most of the things by myself ).
Your answer
Follow this Question
Related Questions
I can not get my character to crouch? Character not sliding on walls? 0 Answers
How to move upward with wall jump and not be pulled down too quickly? 0 Answers
I have a walljump script but the walljump doesn't work right can someone help me? 0 Answers
Help with walljump/ wallstick script!,Help with walljump/ wallstick script! 0 Answers