Rotation of Instantiated object wrong

I have a script that applies force to an Instantiated object with a direction based on the current rotation of the object the script is attached to. My problem is that the instantiated object is always rotated 90 degrees in the wrong direction.

I’ve tried changing the rotation of the Instantiated object, but then the applied force is is wrong.

var fwd : Vector3;
fwd = transform.rotation * (Vector3.forward);
var bulletClone = Instantiate(bulletPrefab, transform.position + transform.forward*1.7, Quaternion.identity);
bulletClone.rigidbody.AddForce(fwd * force, ForceMode.Impulse);

How do I get rotate the object without altering the direction force is applied in any way?

EDIT: Just wanted to say that the Instantiated object is a simple cylinder made in Unity. Changing the rotation of the cylinder before making it a prefab has had no effect.

You need to put it in a parent, rotate it by 90 degrees and then make the parent the prefab.

Also fwd = transform.rotation * Vector3.forward is just transform.forward;

I solved it by (perhaps) doing as you intended? Attached the script to the ship. Made a empty gameobject a child of the ship then rotated the empty gameobject 90 degrees on the x-axis. Then in my script I changed AddForce to use .up instead of .forward. Final function ended up like this:

function shootBullet() {
	var bulletInstance : Rigidbody;
	bulletInstance = Instantiate(bulletPrefab, spawnPoint.position, spawnPoint.rotation);
	bulletInstance.velocity = spawnPoint.parent.gameObject.rigidbody.velocity;
	bulletInstance.AddForce(spawnPoint.up * force, ForceMode.Impulse);
}

Other simple way to solve this issue without creating empty parent game object:

GameObject pc = (GameObject) Instantiate (Prefab, position, rotation, transform);
pc.transform.Rotate (new Vector3(rotationWished.x,rotationWished.y,rotationWished.z));

Where you choose in Vector3 rotationWished which rotation you want.