Fundamental problem with FPS: Aiming projectiles

Basement Bob’s solution is literally the solution, lol. You line trace from the camera location straight forward by a very large distance — for example, 20,000 units. The start location is the camera’s position, and the end location is calculated as CameraLocation + (CameraForwardVector * 20000). Then, you check whether the trace hit anything. If it did, you use the hit result’s impact point as the target. If it didn’t hit anything (e.g. shooting into the sky), you fall back to using the trace’s end location instead. That point (impact or trace end) becomes the target for a “Find Look At Rotation” from the weapon’s muzzle to the target location. Plug that rotation into the projectile’s spawn transform, and boom — it fires exactly where the crosshair is pointing.

Pro tip for FPS games: run a single long-distance camera line trace every tick and store the result in a variable that other systems can access. This avoids doing multiple traces per frame. You can reuse that trace to update crosshair color (like red for targets, green for friendlies), to aim projectiles, to check for pickups, and so on.