Question by
SecretLumberjack · Jun 04, 2017 at 04:43 AM ·
2dvelocityjumpplatformercharacter controller
Rigidbody2D.velocity Interupts Rigidbody2D.AddForce in 2D Platformer
I am using Rigidbody2D.velocity for horizontal character movement and Rigidbody2D.AddForce to jump. I am trying to add wall jumping to my character and I want it to launch the player up and away from the wall. The problem is that in the next frame after the wall jump, the character's velocity is reset to the movement velocity.
Here is the relevant code: public class PlayerController : MonoBehaviour { //True if touching ground or walls bool grounded = false; bool wallLeft = false; bool wallRight = false;
//Where to check for ground and walls
public Transform groundCheck;
public Transform wallCheckLeft;
public Transform wallCheckRight;
//Radius for check for ground and walls
float groundRadius = 0.2f;
public LayerMask whatIsGround;
public float jumpForce = 700f;
void Start ()
{
}
void FixedUpdate ()
{
grounded = Physics2D.OverlapCircle(groundCheck.position, groundRadius, whatIsGround);
wallLeft = Physics2D.OverlapCircle(wallCheckLeft.position, groundRadius, whatIsGround);
wallRight = Physics2D.OverlapCircle(wallCheckRight.position, groundRadius, whatIsGround);
float move = Input.GetAxis("Horizontal");
GetComponent<Rigidbody2D>().velocity = new Vector2(move * maxSpeed, GetComponent<Rigidbody2D>().velocity.y);
if (grounded && Input.GetKeyDown(KeyCode.Space))
{
GetComponent<Rigidbody2D>().AddForce(new Vector2(0, jumpForce));
}
if (wallLeft && !grounded)
{
if (Input.GetKeyDown(KeyCode.Space))
{
GetComponent<Rigidbody2D>().AddForce(new Vector2(jumpForce, jumpForce));
}
}
if (wallRight && !grounded)
{
if (Input.GetKeyDown(KeyCode.Space))
{
GetComponent<Rigidbody2D>().AddForce(new Vector2(jumpForce * -1, jumpForce));
}
}
}
}
I like the way Rigidbody2D.velocity works and would prefer to use it instead of other methods. What would be the best way to fix this?
Comment