How can I get my bullets to fire in the direction I am facing?

First, I realize that this question has been asked several times, but I don’t actually see any solutions that are helping my situation.
Here is my issue, my team and I are making a FPS/ Tower Defense type game. My problem is my bullets are not flying in the direction I need them to fire they only fire in the direction the PLAYER is facing not the weapon. In my hierarchy I have the controller, then child of the controller is the camera, child to the camera is my gun prefab, and child to the gun prefab is my transform at the end of the barrel. The bullet will go in any direction the player is facing, but will not shoot straight up or straight down. Here is my code:
{
public KaneLife kane;

public Rigidbody bullet;
public Rigidbody grenade;
public Transform muzzle;
public Transform grenade1;
public Text timer;
public float special = 0f;

public float fireRate = .3f;
private float lastShot = 0f;
public AudioSource booooom;

private float speed = 50;

// Use this for initialization
void Start ()
{
    kane = GetComponent<KaneLife>();
}

void Attacking()
{
    if (Input.GetKey(KeyCode.Mouse0))
    {
        if (Time.time > fireRate + lastShot)
        {
            Rigidbody instantiatedProjectile = Instantiate(bullet, muzzle.transform.position, muzzle.transform.rotation) as Rigidbody;
            instantiatedProjectile.velocity = transform.TransformDirection(Vector3.forward /** Time.deltaTime*/ * speed);
            kane.curAmmoCount--;
            lastShot = Time.time;
        }
    }
    if (Input.GetKeyDown(KeyCode.Alpha1) && special >= 10f)
    {
        Rigidbody instantiatedProjectile1 = Instantiate(grenade, grenade1.transform.position, transform.rotation) as Rigidbody;
        instantiatedProjectile1.velocity = transform.TransformDirection(new Vector3(0, 20, 10));
        special = 0f;
        booooom.Play();
    }
}

// Update is called once per frame
void Update ()
{
    Attacking();
    if (special == 10f)
    {
        return;
    }
    if (special >= 0f)
    {
        special += Time.deltaTime;
    }
}

}

Here is an image of what it is doing, note the gun is facing straight up, and the bullets are going straight forward.

A simple solution to get this to work right would be quite helpful please it is too late for a complete overhaul on the shooting, as this is due shortly. (End of the week)

Rigidbody instantiatedProjectile = Instantiate(bullet, muzzle.transform.position, muzzle.transform.rotation) as Rigidbody;
instantiatedProjectile.velocity = transform.TransformDirection(Vector3.forward /** Time.deltaTime*/ * speed);

You’re instantiating the bullet to face the way your muzzle is facing, yet then apply a velocity in the direction that player is facing… that’s me assuming this script is attached to your player? Just change it to:

    Rigidbody instantiatedProjectile = Instantiate(bullet, muzzle.transform.position, muzzle.transform.rotation) as Rigidbody;
                 instantiatedProjectile.velocity = muzzle.transform.TransformDirection(Vector3.forward /** Time.deltaTime*/ * speed);

To clarify, you’re instantiating it right, but then setting the velocity to the players forward direction by accessing “transform.forward”. This direction is the players direction.

@oStaiko that makes sense thank you for the help I will try this when I get home from work and let you know how it goes.