Get a point on raycast when collision = false

hi, im making a grapling gun script and have some issues when aiming it. its a third person game and im using raycast from cam to mouseposition to aim my gun. but whenever my ray is not hitting an object it automatically points towards the Scene origin and i cant fire my gun to where i was supossed to be pointing at. here is part of the script.

RaycastHit hit;
	Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
	Physics.Raycast (ray, out hit);
	float dist= Vector3.Distance(Grap.transform.position, hit.point);
		Debug.DrawLine(Grap.transform.position, hit.point);
		//on click
			if (Input.GetButtonDown(button)){
				//when shooting get target position
			if (Physics.Raycast (ray, out hit)==false){
				Debug.Log ("out of range");
				Vector3 screenpoint=Input.mousePosition;
				Debug.DrawLine(Grap.transform.position, ray.direction*range);
				Debug.Log ("target"+target);
				//instanciate hook
				hookinstance=Instantiate(hook, Grap.transform.position,Grap.transform.rotation)as GameObject;
				//shoot hook

Your logic here has a couple of problems. A RaycastHit gets it value from the Physics.Raycast() call. If the call fails, then the value is either uninitialized or it is stale. You do two raycast calls, and you don’t check the return value from the first. Usually when you have a situation like this one where you want a ‘target’ when the Raycast() fails, then you decide on a distance and calculate a point from the distance. Typically the logic would look like:

RaycastHit hit;
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast (ray, out hit)) {
    target = hit.point;
else {
    target = ray.GetPoint(range);

Note that the origin of the ray created by ScreenPointToRay() is the camera’s near clip plane.