A 2D Character Controller with Rigidbody2D.AddForce

I just want to know if it’s possible to fashion a 2D character controller where player movement is based on the AddForce method rather than directly editing the velocity of the character’s attached rigidbody2D.

In this video, which is very helpful in general, Geig constructs his movement script for the x direction with this line:

moveX = Input.GetAxisRaw("Horizontal");
rb.velocity = new Vector2(moveX * speed, rb.velocity.y);

…which has worked very well for me until now. However, I’ve realized that directly writing “moveX * speed” to the ridigbody’s velocity bars any external forces from influencing the player’s movement in the X direction.

In short, I’m looking for a way to achieve more or less the exact effect obtained by those lines of code (visible in the video) for a 2D rigidbody-based player character that can also be affected by external forces like horizontal springs or horizontal knockback.

Maybe AddForce could work somehow? I’m just not sure how to go about implementing it.

Cheers.

I have EXACTLY the same problem right now! And noone seems to know the answer (or wants to help us…)

I am having the same problem too with a icy material. Even though the user should slide and slip along it when the horizontal input returns to zero the velocity stops. I think what we need to do is use add force but check in code that we are not going faster than max speed before applying it.

if(Mathf.Abs(Rigidbody2d.velocity.x) < maxSpeed){
  GetComponent<Rigidbody2D>.AddForce(new Vector2(move * maxSpeed,0))
}