How can I make my player's gun point at the cursor, not the player itself?

I’m making a 2D top-down shooter in unity. Currently, I’m using the C# code below to point my player towards my cursor at all times, this works but isn’t exactly what I want.

//Find the mouse position on the camera view
Vector3 mousePoint = theCamera.ScreenToWorldPoint(Input.mousePosition);

//Find how the mouse relates to the object's position
Vector3 difference = mousePoint - transform.position;

//Find wanted angle of rotation
float rotZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
Quaternion newRotation = Quaternion.Euler(new Vector3(0.0f, 0.0f, rotZ + adjustmentAngle));

//Apply wanted angle of rotation
transform.rotation = Quaternion.Lerp(transform.rotation, newRotation, Time.deltaTime * smoothing);

This results is this:


While this works, my player’s gun isn’t in the centre of my player so when the gun fires it actually skims past the cursor missing slightly.


How can I get my player to rotate so his gun is what points towards the cursor rather than himself? The player rotates around the center of his head. I have a child GameObject at the end of the barrel of his gun used to Raycast and stuff which I figure can be used?

First, you need to get the alpha angle in image below:


for that, you need the distance between the center of the player and gun, and you need the distance between the center of the player to the cursor point:

float yForAtan = distanceFromGunToPlayer;
float xForAtan = distanceFromPlayerToCursor;

float alpha = Mathf.Atan2(yForAtan,xForAtan) * Mathf.Rad2Deg;

finally, in your calculations, when you want to rotate player toward the cursor point, substract alpha angle to rotZ and rotate player.