- Home /
Top down movement problem. Player rotates to right.
So here's the problem. I have a cube, its original I know. Anyway, whenever I move forward it rotates, drags, or tilts, or whatever you wanna call it, to the right.
The cube is a rigid body. But when you I disable gravity it works just fine. I tried messing with the rigid body settings but it doesn't change anything. The code it self is from the scripting reference for a simple car movement script.
The code:
#pragma strict
var speed : float = 5.0;
var rotationSpeed : float = 300.0;
var jumpHeight : float = 10;
var canJump : boolean = false;
function OnCollisionEnter(floorCol : Collision)
{
if(floorCol.gameObject.name == "Floor")
{
canJump = true;
}
}
function OnCollisionExit(floorCol : Collision)
{
if(floorCol.gameObject.name == "Floor")
{
canJump = false;
}
}
function Update ()
{
// Get the horizontal and vertical axis.
// By default they are mapped to the arrow keys.
// The value is in the range -1 to 1
var translation : float = Input.GetAxis ("Vertical") * speed;
var rotation : float = Input.GetAxis ("Horizontal") * rotationSpeed;
// Make it move 10 meters per second instead of 10 meters per frame...
translation *= Time.deltaTime;
rotation *= Time.deltaTime;
// Move translation along the object's z-axis
transform.Translate (0, 0, translation);
// Rotate around our y-axis
transform.Rotate (0, rotation, 0);
if(Input.GetKeyDown("space") && canJump)
{
rigidbody.AddForce (Vector3.up * jumpHeight);
}
}
Comment
Answer by ChrisSch · Jun 11, 2013 at 02:31 PM
Using a different code now and same thing is happening.
public var moveSpeed : float = 4f;
public var turnSpeed : float = 200f;
function Update ()
{
if(Input.GetKey(KeyCode.UpArrow))
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
if(Input.GetKey(KeyCode.DownArrow))
transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);
if(Input.GetKey(KeyCode.LeftArrow))
transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime);
if(Input.GetKey(KeyCode.RightArrow))
transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime);
}
Freezing rotation seems to do the trick but thats a workaround not solution cause I might need the rotation unfrozen sometime.