Hi there, I am trying to wall jumping into my 2d platformer. I have managed to code it so that a certain command will run when next to wall while in the air but it does not apply the force x-axis correctly.
if(Walled && Input.GetButtonDown("Jump") && !Grounded && facingRight)
{
rigidbody2D.AddForce(new Vector2(-600, 600));
Debug.Log("Right Jump");
}
if(Walled && Input.GetButtonDown("Jump") && !Grounded && !facingRight)
{
rigidbody2D.AddForce(new Vector2(600, 600));
Debug.Log("Left Jump");
It has no problem applying the upwards force but only moves enough on the x-axis to no longer be Walled.
I think it might be because it is no longer applying the force as it is no longer next to a wall but I am unsure if this is right or how to fix it.
Whole Script:
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour
{
[HideInInspector]
public bool facingRight = true;
public float maxSpeed = 10f;
public float jumpForce = 700f;
public Transform groundCheck;
public Transform wallCheck;
public LayerMask whatIsGround;
public float groundRadius = 0.2f;
bool Grounded = false;
bool Walled = false;
Animator anim;
void Start ()
{
anim = GetComponent<Animator>();
}
void FixedUpdate ()
{
Grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround);
anim.SetBool ("Ground", Grounded);
Walled = Physics2D.OverlapCircle (wallCheck.position, 0.1f, whatIsGround);
anim.SetBool ("Walled", Walled);
float move = Input.GetAxis ("Horizontal");
anim.SetFloat ("Speed", Mathf.Abs(move));
rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y);
if(move > 0 &&!facingRight)
Flip ();
else if(move < 0 && facingRight)
Flip ();
}
void Update()
{
if(Grounded && Input.GetButtonDown("Jump"))
{
anim.SetBool ("Ground", false);
rigidbody2D.AddForce(new Vector2(0, jumpForce));
}
if(Walled && Input.GetButtonDown("Jump") && !Grounded && facingRight)
{
rigidbody2D.AddForce(new Vector2(-600, 600));
Debug.Log("Right Jump");
}
if(Walled && Input.GetButtonDown("Jump") && !Grounded && !facingRight)
{
rigidbody2D.AddForce(new Vector2(600, 600));
Debug.Log("Left Jump");
}
}
void Flip()
{
facingRight = !facingRight;
Vector3 TheScale = transform.localScale;
TheScale.x *= -1;
transform.localScale = TheScale;
}
}
Thanks in advance!