- Home /
Trouble Setting/Combining LayerMask with "Builtin" Layer
Hello everyone, I'm having an issue trying to set a multi-layer LayerMask in code, but have been getting some results I don't understand. I have read This post, so I thought I had at least some understanding of how this should work, but clearly I'm not quite there yet.
In Detal:
The issue comes into play when I try to set/add a builtin Layer to the mask. In the code below, the 3 user set layers show up correctly, but the builtin "Water" layer is nowhere to be seen:
public int water = 4;
public int npcComp = 8;
public int playerComp = 9;
public int terrain = 10;
public LayerMask hittableLayers; //public just for easy display.
void Start()
{
hittableLayers = (1 << water) | (1 << npcComp) | (1 << playerComp) | (1 << terrain); //returns as 'npcComp + playerComp + terrain'.
}
If I use the NameToLayer() method, everything seems to work:
void Start()
{
hittableLayers = (1 << LayerMask.NameToLayer("Water") ); //returns as 'Water'.
}
If I use "4" directly, everything seems to work:
void Start()
{
hittableLayers = (1 << 4); //returns as 'Water'.
}
But, if I set a int Var to 4 and use that, I get back "Unnamed6" as the layer:
void Start()
{
hittableLayers = (1 << water); //returns as 'Unnamed6'.
}
So I'm wondering what the difference is in those cases. Why does using "4" work, but using a int with the value of 4 doesn't (because it seems to work for user layers)? Any ideas are appreciated, thank you for reading.
UPDATE:
It seems to matter if "water" is a private (it works) or public (gets 'Unnamed6') variable, not sure why...
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
ArgumentException: NameToLayer can only be called from the main thread 1 Answer
Distribute terrain in zones 3 Answers
A game object can only be in one layer. The layer needs to be in the range [0...31] 6 Answers
Detecting that I'm clicking a unit even though I'm not? 0 Answers