Add force relative to the angle/direction?

So I’m trying to make this space exploration game, but I’m having a little trouble getting the force applied to the right direction that the ship is facing. Here is my current code for the movement

    var speed = 0.8;

var turnSpeed = 0.15;





function Start () {



    rigidbody.useGravity = false;

}



function Update () {

var currentvertical : Vector3 = transform.TransformDirection(transform.up*Input.GetAxis("Vertical")*turnSpeed);

var currenthorizontal : Vector3 = transform.TransformDirection(transform.right*Input.GetAxis("Horizontal")*turnSpeed);

    if (Input.GetButton("Jump")) { //Spacebar by default will make it move forward

       rigidbody.AddRelativeForce (Vector3.forward*speed);

    }

    rigidbody.AddRelativeTorque(currenthorizontal);

    // W key or the up arrow to turn upwards, S or the down arrow to turn downwards.

    rigidbody.AddRelativeTorque(currentvertical);

    // A or left arrow to turn left, D or right arrow to turn right. 

    }

When I try to move, I only move upwards, help with this would be great, thanks.

You’re messing the directions using 3 world to local successive conversions and using the wrong axes. If you add a relative torque, you must pass the world axis. To turn left or right in a 3D world, for instance, you must use AddRelativeTorque(Vector3.up * Input.GetAxis(“Horizontal”) * turnSpeed) - the torque is applied around the axis selected - Y, in this case. Since it’s relative, the local Y (up) axis is used.

The behaviour will be very similar to the RCS (Reaction Control System) that controls a Space Shuttle direction: turning left or right activates the lateral thrusters, and the spaceship starts spinning around its vertical axis.

var speed = 0.8;
var turnSpeed = 0.15;

function Start () {
    rigidbody.useGravity = false;
}

function Update () {

    var currentvertical : Vector3 = Vector3.right*Input.GetAxis("Vertical")*turnSpeed;
    var currenthorizontal : Vector3 = Vector3.up*Input.GetAxis("Horizontal")*turnSpeed;
    if (Input.GetButton("Jump")) { //Spacebar by default will make it move forward
       rigidbody.AddRelativeForce (Vector3.forward*speed);
    }
    rigidbody.AddRelativeTorque(currenthorizontal);
    // W key or the up arrow to turn upwards, S or the down arrow to turn downwards.
    rigidbody.AddRelativeTorque(currentvertical);
    // A or left arrow to turn left, D or right arrow to turn right. 
}