- Home /
Ignoring an object (using raycast with layers) is not working
Hi everybody! I'm new here. Until now I searched the Answers and the forum, if I had a problem, and found the solutions too. But now I have a problem I can't solve. So I need your help!
I try to ignore the player object when I use raycasting, but it doesn't work. First I tried by selecting the "Ignore Raycast" for the "player" object in the Inspector. After it didn't work, I created a new layer for the object, called "Player" (it's layer 8) and assigned it to this layer. It didn't work too. So I tried adding the object to the layer using scripts. Here they are, and the raycasting too:
function Update () {
var ray : Ray = Camera.main.ScreenPointToRay (Vector3(838,678,0));
var hit : RaycastHit;
var thePlayer : GameObject = GameObject.Find("/Player");;
thePlayer.layer = 8;
var layerMask : int = 8;
layerMask = ~layerMask;
if (Physics.Raycast(ray, hit, Mathf.Infinity, layerMask))
{
...
}
}
It's not important, what is in the code block after the if statement, but it should execute only if the ray hits anything, but the player object. And it executes, when the ray hits the player object.
Does anyone know, what is the problem?
Answer by Seth-Bergman · Jan 07, 2013 at 10:10 PM
Layermask uses a bitmask, not just an exact int..
http://docs.unity3d.com/Documentation/Components/Layers.html
var layerMask = 1 << 8;
otherwise, this looks ok
Thank you! Now it works. It looks like my knowledge about layers is little bit poorish.
I'm doing the following, and for some reason this doesn't work. I'm setting the gameObject layer programatically. $$anonymous$$aybe it's related to this?
Layer$$anonymous$$ask layer$$anonymous$$ask = 1 << Layer$$anonymous$$ask.NameToLayer("Ignore Raycast");
layer$$anonymous$$ask = ~layer$$anonymous$$ask;
bool rayHit = Physics.Raycast(pointerRaycast, out pointerCollidedWith, $$anonymous$$athf.Infinity,layer$$anonymous$$ask);
The type of your layer$$anonymous$$ask variable should be int or var because you are getting a bit mask, not Layer$$anonymous$$ask. See the documentation link Seth provided above for examples.
int layer$$anonymous$$ask = 1 << Layer$$anonymous$$ask.NameToLayer("Ignore Raycast");
Your answer
Follow this Question
Related Questions
Ignoring Layer for OnMouseEnter/OnMouseExit 0 Answers
function OnMouseOver() ignore selected raycast 1 Answer
How to call ignore raycast layer 2 Answers
Ignore Touch 2 Answers