'jerking' movement...

Ok, i have a very simple movement control on my character (with rigidbody):

var moveSpeed : float = 10;

function Update () {

if(Input.GetButton("forward")){
    transform.position += transform.forward * moveSpeed * Time.deltaTime;
    	}

}

Couldn’t be simpler, right?

But when i press ‘forward’, the model ‘jerks’ forward a little…how do we stop this?

I’ve tried using -

  • ‘Time.smoothDeltaTime’

  • a simple slow acceleration method (increasing moveSpeed slowly over time until we reach top speed),

but there is still that small ‘jerk’ forwards.

A system with ‘AddRelativeForce’ solves the problem, but raises many others, so if possible i’d like to solve the problem without going to AddForce.

Thank you for your time, Tom :slight_smile:

Here are a couple of scripts…nearly identical. Is this the kind of movement you are looking for? Does this solve your jerkiness.

Start with a new scene. Place a cube at (-5,0,0) and rotate it 90 degrees on the Y axis. Use the Left Arrow.

var moveSpeed : float = 0.0;
var incSpeed  : float = 0.02;
var maxSpeed  : float = 2.0;
 
function Update () {
 
	if(Input.GetKey(KeyCode.RightArrow)){
	    moveSpeed += incSpeed;
    }
	else {
		moveSpeed -= incSpeed;
	}
	
	moveSpeed = Mathf.Clamp(moveSpeed, 0.0, maxSpeed);
    transform.position += transform.forward * moveSpeed * Mathf.Sin(moveSpeed/maxSpeed * Mathf.PI / 2.0) * Time.deltaTime;
}

And:

var moveSpeed : float = 0.0;
var incSpeed  : float = 0.01;
var maxSpeed  : float = 2.0;
 
function Update () {
 
	if(Input.GetKey(KeyCode.RightArrow)){
	    moveSpeed += incSpeed;
    }
	else {
		moveSpeed -= incSpeed;
	}
	
	moveSpeed = Mathf.Clamp(moveSpeed, 0.0, maxSpeed);
    transform.position += transform.forward * moveSpeed * Time.deltaTime;
}