rigidbody2D addforce on x-axis
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!
Answer by goryfigment · Mar 31, 2016 at 10:02 AM
just change the jumpforce to the x axis of the vector.
rigidbody2D.AddForce(new Vector2(jumpForce, 0));
against the wall you can try to add a specific force from the x and y axis:
rigidbody2D.AddForce(new Vector2(jumpForce, jumpForce));
Your answer
Follow this Question
Related Questions
Predicting max jump height of a force impulse 1 Answer
Jump Ability in my first game (2d platformer) 1 Answer
Rigidbody2D AddForce Impulse not working on X axis 5 Answers
How do I ignore gravity when using Rigidbody and always have the same jump force? 1 Answer
Confused about how AddForce works 1 Answer