Can't Translate and Rotate at same time

I’m writing my own character controller that uses a rigidbody. I’m getting stuck on something weird. This is my code (variable declarations not included):

void Start() {
	myNormal = transform.up;
	rigidbody.freezeRotation = true;

	// Distance between center of Character Position and the Ground
	var collider = gameObject.collider as CapsuleCollider;
	distGround = collider.bounds.extents.y - collider.center.y;
}

void FixedUpdate() {
	// Appliy Gravity
	rigidbody.AddForce(-1 * gravity * this.rigidbody.mass * myNormal);
}

void Update() {
	transform.Translate(Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime, 0, Input.GetAxis("Vertical") * moveSpeed * Time.deltaTime);
	transform.Rotate(0, Input.GetAxis("Mouse X") * turnSpeed * Time.deltaTime, 0);
	camera.transform.Rotate(-1 * Input.GetAxis("Mouse Y") * turnSpeed * Time.deltaTime, 0, 0);
}

The update function handles the character translation and rotation. For vertical rotation (looking up and down) only the camera rotates. This is because I plan on using some weird gravity effects latter on and need the character to stay vertical with the floor.

My problem with this script so far is that I can move the character position with WASD, and look around with the Mouse, but I can’t do both at the same time.

While my character is moving, the rotation is frozen. How can I fix this?

I think your broken rotation has something to do with having frozen rigidbody rotation :slight_smile:

Do not translate or rotate a rigidbody. This will cause it to teleport.

Use AddForce and AddTorque instead.