Finding things with Raycasthit

Hello :slight_smile:

I am writing a few functions for Buttons in my game, but no matter what I do I can’t seem to get anything with Raycasthit.

At the moment I have two problems:

1st: I wan’t to send a message to a script. I’m trying to find it with GetComponent, but I always get this Error: “NullReferenceException: Object reference not set to an instance of an object”

    function Sound1 (){
    var hit : RaycastHit;
	var ray : Ray = Camera.main.ScreenPointToRay(Vector3(Screen.width*0.5, Screen.height*0.5,0));
	var pSound : PSound;
	pSound = hit.collider.gameObject.GetComponent(PSound);
 
 	   if(Physics.Raycast(ray, hit, 5)){
 	   		Debug.Log("foundPSound");
 	   		pSound.SendMessage("PlayS");
     		SendMessage("DisMMenu");  
     	}
 }

2nd: I want to find the child of a GameObject to enable it. There I get the “NullReferenceExeption” error aswell :frowning:

  function Colour (){
 	var hit : RaycastHit;
 	var ray : Ray = Camera.main.ScreenPointToRay(Vector3(Screen.width*0.5, Screen.height*0.5,0));
 	var col = hit.transform.Find("ColorPicker").gameObject;
 	   
 	   if(Physics.Raycast(ray, hit, 5)){
			col.enabled = true;
     	}
 }

I have tried changing certain phrases (like “collider” to “transform”, or “enabled” to “active”, etc) for hours but I seem to get it right.

It would be great if anyone could help me.

Thanks in advance :wink:

You’re calling this line:

pSound = hit.collider.gameObject.GetComponent(PSound);

before you’ve actually populated the contents of ‘hit’, so your truing to get collider and the gameObject from something that hasn’t been filled with data yet. You need to move that to within you’re Physics.Raycast if statement.

I’d also do a few safety calls to make sure you actually are actually able to integorgate the response as you’d expect (e.g. if(hit != null) { }, if(hit.collider != null) { }, if(hit.collider.gameObject != null) {}, etc)