null new collider for raycast grabbing

I am trying to create a script that grabs an object when you press ‘g’. I think the code I wrote should work, but I get “NullReferenceException: Object reference not set to an instance of an object
Cameragrab.Update () (at Assets/Cameragrab.cs:24)” when I try to grab an object.

Here’s the code:

using UnityEngine;
using System.Collections;

public class Cameragrab : MonoBehaviour
{
		// Use this for initialization
		void Start ()
		{
	
		}
	
		// Update is called once per frame
		void Update ()
		{
		GameObject held = new GameObject();
				if (Input.GetKey ("g")) {
						RaycastHit hit = new RaycastHit();

						if (Physics.Raycast (transform.position, transform.forward, 5f)) {
								Debug.Log ("Touching");
				if(hit.collider == null){
					Debug.Log("Here");
				}
								held = hit.collider.gameObject;

								hit.collider.gameObject.transform.parent = transform;
								hit.collider.gameObject.transform.position = transform.position - transform.forward;
						}
				} else if (held != null) {
						held.transform.parent = null;
						held = null;
				}
		}
}

It seems when I create the new hit raycast, it is null, as I receive the “Here” in my debug log when I press “g”. Is this the problem? If not, what is? If it is, how do I fix it?

as far as i can tell, hit is never assigned to, so will always be null. Try changing:

if (Physics.Raycast (transform.position, transform.forward, 5f))

to:

if (Physics.Raycast (transform.position, transform.forward, out hit, 5f))

also, remove the new RaycastHit(); declaration, as when you have the g button held down, it will set it to null every frame. Same goes for the held gameobject variable in update. Remove the new GameObject(); declaration otherwise it will be set to null every frame. Instead, set it after your class name so that you have it cached after pressing g.