Raycasthit returning a different hit.point

I have a raycast being fired from two points and I only want the player to fire when they can clearly see the tagged object. To do this I fire the ray from the gun to the target reticle.
The issue I’m having is that the ray is being drawn in the scene from the objects stated above. You can see in the attached image the drawn ray. Yet I still wasn’t getting the intended result. After some testing I discovered the code was working but the ray was not.
From the image you can see a green circle which I used to show where the ray was hitting.
Any ideas on what may be causing this issue would be great.

Code:
RaycastHit2D hit = Physics2D.Raycast(Hand.transform.position, camMove.e.transform.position, 20);
Vector3 direction = camMove.e.transform.position - Hand.transform.position;

        Debug.DrawRay(Hand.transform.position, direction * hit.distance);
       
        print(hit.transform.name);
        var bullet = (GameObject)Instantiate(temp, hit.point, hit.transform.rotation);
        return hit.collider != null && hit.transform.tag == "Enemy";

Attached image:

Moderators, if there is an issue with my question or the format of it could you please inform me what I am missing?

Just a simple mistake on your part. If you look at the Physics raycast docs (or read the pop-up) the second Vector3 input is a direction. You’re using it as “second point in the ray.”

Change the raycast to be the same as the DrawRay line. cam2.position is a point. cam2.position-hand.position is a direction.

This is a common confusion with Vector math. We all know an int can be a shoe-size, age, amount of cows … . But it’s easy to see a Vector3 and think “that’s an xyz point.” Of course, just like an int, a Vector3 could be all sorts of things: point, local/global space direction, offset to/from, eulerAngles, rotation speeds … .