- Home /
Question by
Humblebee88 · Mar 06, 2014 at 12:49 AM ·
movementspaceship
Forward movement rotated on movement script?
I'm trying to make a movement script for a space ship, and I'm new to javascript in general so I'm sorry if this is a noob question.
I'm having an issue where my ships forward orientation gets rotated after I make a hard turn. My ship will start moving horizontally in relationship to the ships initial forward vector. I am losing my mind trying to figure it out. Does anyone have any idea what might be causing this? Any help would be much appreciated!
here's the script
#pragma strict
private var moveDirection : Vector3;
private var horzMoveRotation : float;
private var vertMoveRotation : float;
private var shipSpeed : float = 40;
private var horizonalturnspeed : float = 60;
private var verticalturnspeed : float = 60;
private var haveMinAngle : boolean = false;
private var target : float = 0;
private var Rrolltarget : float = -50;
private var Lrolltarget : float = 50;
private var rollspeed : float = 40;
//var looktarget : Transform;
function FixedUpdate()
{
//movement speed
//var shipDirection: Vector3 = (looktarget.position - tansform.position);
moveDirection = Vector3(0, 0,1);
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= shipSpeed;
transform.Translate(moveDirection*Time.deltaTime);
//steering
horzMoveRotation = Input.GetAxis ("Horizontal") * horizonalturnspeed;
vertMoveRotation = Input.GetAxis ("Vertical") * horizonalturnspeed;
horzMoveRotation *= Time.deltaTime;
vertMoveRotation *= Time.deltaTime;
transform.Rotate (vertMoveRotation,horzMoveRotation,0);
//reset roll
if(Input.GetAxis ("Horizontal") == 0)
{
var turnAngle : float = Mathf.MoveTowardsAngle(transform.eulerAngles.z, target,rollspeed * Time.deltaTime);
transform.eulerAngles = Vector3(transform.eulerAngles.x,transform.eulerAngles.y,turnAngle);
}
//print ("horizontal axis" +(Input.GetAxis ("Horizontal")));
//roll right
if(Input.GetAxis ("Horizontal") > 0)
{
var rTurnAngle : float = Mathf.MoveTowardsAngle(transform.eulerAngles.z, Rrolltarget,rollspeed * Time.deltaTime);
transform.eulerAngles = Vector3(transform.eulerAngles.x,transform.eulerAngles.y,rTurnAngle);
}
//roll left
if(Input.GetAxis ("Horizontal") < 0)
{
var lTurnAngle : float = Mathf.MoveTowardsAngle(transform.eulerAngles.z, Lrolltarget,rollspeed * Time.deltaTime);
transform.eulerAngles = Vector3(transform.eulerAngles.x,transform.eulerAngles.y,lTurnAngle);
}
}
Comment
In a quick read the only thing that jumped out at me is that you are doing your turning after you move your object forward. How about moving lines 25 - 30 above line 18.