Dynamic Vector3 axes

Hi! Recently I have been starting on a 3rd person RPG, however my movement doesn’t seem to be working as intended. As it successfully rotates on button press, however forward and backward it doesn’t move forward in line with the cube. Basically if I rotated the cube to 45° and pressed W, it would move 0° forward not 45°. Thank you in advance!
-Azza

using UnityEngine;
using System.Collections;

public class MoveMe : MonoBehaviour {


    //X is rotation, Y is forward/backward
    private float hInput, vInput;

    private GameObject playerObject;

    public float rotateSmooth, velocitySmooth;
	// Use this for initialization
	void Start () {
	}
	
    void FixedUpdate()
    {
        //Cache input
        hInput = Input.GetAxisRaw("Horizontal");
        vInput = Input.GetAxisRaw("Vertical");
        Movement(hInput, vInput);

    }

    void Movement(float hInput, float vInput)
    {
        if (hInput != 0f || vInput != 0f)
        {
            Rotate(hInput);
            Movement(vInput);
        }

    }

    void Movement(float vInput)
    {
        if(vInput == 1f)
        {
            //Move forward
            GetComponent<Rigidbody>().AddForce(Vector3.forward * velocitySmooth * Time.deltaTime, ForceMode.VelocityChange);
        }
        if(vInput == -1f)
        {
            GetComponent<Rigidbody>().AddForce(Vector3.forward * velocitySmooth * Time.deltaTime, ForceMode.VelocityChange);
        }
    }

    void Rotate(float Input)
    {
        //If rotating left
        if (hInput == -1f)
        {
            transform.Rotate(-Vector3.up * rotateSmooth * Time.deltaTime);
        }
        if (hInput == 1f)
        {
            transform.Rotate(Vector3.up * rotateSmooth * Time.deltaTime);
        }
    }
}

You can use transform.forward to get the local +Z axis for use in the AddForce() method. Since you’re running this through the FixedUpdate method, you should be using Time.fixedDeltaTime which tracks the time between FixedUpdates. Time.deltaTime tracks time between normal Updates.

Also, you should cache the Rigidbody instead of using GetComponent all the time. GetComponent is a slow operation.

Rigidbody myRigidbody;

void Awake()
{
     myRigidbody = GetComponent<Rigidbody>();
}

void Movement(float vInput)
{
     //Stuff
     myRigidbody.AddForce(transform.forward * velocitySmooth * Time.fixedDeltaTime, ForceMode.VelocityChange);
}