First Person Aim?

I’m having trouble controlling the aim in my first person game:

Crosshair is in the middle of the screen, and i want an offset of the empty spawning the projectiles.

Problem is: if you shoot, the projectile will never actually meet the crosshair displayed and makes for weird aiming

(I’m using Python so i’m not bound by Logic Bricks)

The Solutions that came to mind are:

  • have the empty align to the position the camera is looking at with rayCast and alignAxisToVect, but that just makes it weird if you aim around edges of something (also edges of enemies) and makes you shoot somewhere entirely else if you first aimed at the edge of an enemy and then aim 1 pixel to the right.
  • dont have an offset (have the empty in the middle of the screen) - but that just looks weird
  • have the projectile spawn at the offset empty, then let if move to the ray (not straight forward) and the forward, but i think that also is weird
  • have the crosshair not in the middle - also just weird

I think 3. is the best, but before i do something complicated i want to see if there is a better solution.

Is there another/better Solution for this problem?

let the gun/arm aim to hitObject, this keeps hud in center and bullets fly how it should(from gun to hitObject).
due to mouse pointer = crosshair = hitObject

#edit
oh and you can just fake the whole thing also.
just play a flashing animation if you shoot, check with ray if you hit something, you can’t see bullets fly with your bare eye anyway.

actually, ive played games (of the few games i play) that have projectiles not perfectly line up with the crosshair. but long range instant hit weapons should use the ray cast.