FPS crosshair ranging

I’m working on an FPS, using most of my own code but with some stuff from the FPS tutorial. I’m trying to make sure the bullet actually ends up where the crosshair (a GUITexture) is, no matter how far away the target is. Basically, I want to have my bullet collide with the thing I’m shooting at at the exact place where my crosshair shows up, whether I’m shooting at something close in or far away.

Right now I’m using Physics.Raycast from the camera to figure out what the crosshair is on, which gives me the precise vector along which my bullet needs to travel, but I don’t know how best to make the bullet follow that vector. Should I fudge the bullet’s rotation so that I can then use transform.forward for the velocity, or should I leave the rotation the same as for the weapon and skew the bullet’s velocity?

Stated differently, is it better to have the bullet rotated differently than the weapon, or is it better to have the bullet moving in a direction that’s not quite forward?

I answered a similar question sometime ago: Making the weapon shoot whatever the crosshair is - this answer does a raycast from the crosshair and, if something is hit, fires the bullet from the spawnpoint to the hit point; if nothing hit, just fires in the ray direction (but starting at the spawnpoint). It’s useful for instantiated projectiles; for fast bullet weapons like rifle or guns, you can just play the shot sound and use the raycast hit structure to identify the victim and apply damage like the FPS tutorial machine gun does.