- Home /
How to prevent jitter with movement over curved slopes
I am currently building a 2D platformer where the character can walk on curved slopes.
To do this I make use of Unity's Physics with a Rigidbody2D where the RigidBody2D has the option Fixed Angle enabled. Without scripting the character will remain upright, even when walking on a slope.
To make the movement seem more natural I want the character to remain upright in relation to the ground it is standing on (in other words, perpendicular). I implement this by registering the normal in the OnCollisionStay2D event of the Character's GameObject and in then calling the following code in the FixedUpdate:
transform.up = this.registeredNormal;
This seems to work, as my character stands up-right on any surface, but when I combine this with movement by applying force on the rigidbody it starts to jitter. Something which it does not do when I do not alter transform.up. This becomes even worse when I lerp the transition from transform.up to the normal discovered during a collision.
The code that I use to make my character stand up straight is:
public class StandStraight : MonoBehaviour {
private Vector2 turnToNormal = Vector2.up;
void OnCollisionStay2D(Collision2D other) {
if ( ! other.contacts [0].normal.Equals (this.turnToNormal)) {
this.turnToNormal = other.contacts [0].normal;
}
}
void FixedUpdate () {
transform.up = this.turnToNormal;
}
}
I use OnCollisionStay2D and not OnCollisionEnter2D because I am using an EdgeCollider2D that is curved; which means that OnCollisionEnter2D will only trigger once and never again when moving over that collider.
I get the feeling that the combination of using forces to move the character forward combined with altering transform.up is a poor combination but I could not find any other way to align my character with the normal of the surface below.
Thank you for your help with this.
Your answer
Follow this Question
Related Questions
2D endless scrolling game - Which method is best for moving objects without lags? 2 Answers
Damaging Enemies 1 Answer
2D Slope acceleration 1 Answer
How to make a slope? 1 Answer
Character rotation and move to mouse click point with speed 0 Answers