- Home /
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?
It is very hard to help you because the error you gave us makes reference to a line number and you didn't give us the complete script.
Please give us the complete script, and PLEASE format it so it is all in the code box. Then we might be able to help you more...
exactly! Thanks for making it readable. It made it much easier to see the issue :)
Thank you $$anonymous$$rFijiWiji. It worked! Now I just need to fine tune it.
And thank you jeff. I am very new, and trying to figure the system out.
Answer by MrFijiWiji · May 17, 2014 at 11:28 PM
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.
Your answer
Follow this Question
Related Questions
Finding a RaycastHit tag (Null Reference Exception) 2 Answers
move object over another object normals 1 Answer
Raycast causes game to crash when shooting up 1 Answer
Issue with raycast hit 1 Answer
Please help me with Raycast 1 Answer