- Home /
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?
Answer by meat5000 · Dec 07, 2013 at 12:22 PM
I think your broken rotation has something to do with having frozen rigidbody rotation :)
Do not translate or rotate a rigidbody. This will cause it to teleport.
Use AddForce and AddTorque instead.
Thanks for the answer! However there are quite a lot of working rigidbody controllers using Transform and Rotate that seem to work quite well. I can actually get my rotation working fine if I use the keyboard to rotate around, it's nice and fluid and works as expected (even with the rotation frozen, which is necessary in my case). For some reason mouse input doesn't seem to get processed while the character is moving :s
You will find they move ok but will get a lot of problems with regard to colliders and collisions. You will find that it is the transform moving the rigidbody and not the rigidbody moving the transform.
Have you tried some Debug.Log output for the mouse?
Your answer
Follow this Question
Related Questions
Porting to Windows: Translate problem 2 Answers
VR Scale/Move 0 Answers
Rotation follow translation 3 Answers
simple 2d car Ai 0 Answers