- Home /
Confused as to how my RaycastHit script works
var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
var hit : RaycastHit;
if (Physics.Raycast (ray, hit, 1000)) {
// Debug.DrawLine (ray.origin, hit.point);
mouse_icon.transform.position = hit.point;////ray.GetPoint(hit.point);
// Debug.Log(hit.point);
}
That works correctly. There are no problems with it that I see.
It puts mouse_icon where my mouse is. It also puts it in the game space in the right spot.
But I'm confused how that is doing it.
If I remove that "if" in it, it no longer works. Yet I didn't set a variable in it.
To expand : So doing that 'if' statement controls where 'hit' goes? If I do another 'if' statement, would it reset 'hit' to the new info?
Answer by skovacs1 · Sep 23, 2010 at 08:33 PM
You really have to be more specific than "it no longer works" - that doesn't tell me what part of it you expected to work and how. When you say you removed the if statement, I don't know if you mean that you simply removed the if or that you completely removed the raycast as well.
See the docs on Physics.Raycast;
You did set a variable: hit. The hitInfo
parameter is specified with the out keyword. The variable is being set by the raycast. If you remove the raycast completely, hit
will be null;
Physics.Raycast
returns true if it hit something (see the docs). If you don't check whether it hit something, when you don't hit anything, what do you thing hit
is going to contain? hit
will likely be null or contain default values.
Since you're using hit
, when it has an invalid value, what do you think will happen when you assign mouse_icon.transform.position
to hit.point
? If hit
is null, then it shouldn't do anything and if it contains some default values, then it won't do anything meaningful.
$$anonymous$$inor point: you don't need the 'out' keyword in UnityScript.
You don't really, but the docs have it, specifying the parameter as a return by reference.