You are using the direction from the camera to the mouse location rather than the direction from the muzzle to the mouse location. To fix this, you’d actually use the ray to do a raycast and then find the hit, using the range * unit vector of the position of the hit minus the muzzle position to then cast the bullet.
Yes, mouse.Hit also works. Should work fine on mobile too. People use screenpointtoray when they don’t wanna work with the mouse object and want more control over what parts query the mouse.