- Home /
Using Physics2D.IgnoreLayerCollision and LayerMask from Editor
I have 2 custom layers set up: Player and Enemies
In the Player I have these two layer masks defined:
public LayerMask playerLayer;
public LayerMask enemiesLayer;
There is a method in which I wish to turn off the layer collision between the player and enemies.
If I try to do it like the following line I get an error:
Physics2D.IgnoreLayerCollision(playerLayer, enemiesLayer, true);
Error:
Failed IgnoreLayerCollision : layer numbers must be between 0 and 31
playerLayer.value
is 512. enemiesLayer.value
is 1024 it seems.
If I do the following everything works as expected, but I want to be able to choose the layers from the editor, not hardcode the names in the script:
Physics2D.IgnoreLayerCollision(LayerMask.NameToLayer("Player"), LayerMask.NameToLayer("Enemies"), true);
What must I do to be able to use the playerLayer
and enemiesLayer
variables in the Physics2D.IgnoreLayerCollision call?
Comparing LayerMask.NameToLayer("Player") == playerLayer
returns false
. Why is that?
Answer by awesomedata · Mar 30, 2016 at 05:11 AM
Seems to be a bug, but there's no bug report anywhere. I'm having the exact same issue! Seems like it's been going on forever now!
Got this code in my fixed update -- and, in fact, it's not working anymore either:
Physics2D.IgnoreLayerCollision(Layer$$anonymous$$ask.NameToLayer("Player") , Layer$$anonymous$$ask.NameToLayer("Jumpthrough") , GetComponent<Rigidbody2D>().velocity.y > 0);
hitJumpthrough = Physics2D.Linecast(new Vector2(colliderBottomLeft.x + transform.position.x , transform.position.y + colliderBottomLeft.y) ,
new Vector2(colliderBottomRight.x + transform.position.x , transform.position.y + colliderBottomRight.y) ,
Layer$$anonymous$$ask.NameToLayer("Jumpthrough") );
hitSolid = Physics2D.Linecast(new Vector2(colliderBottomLeft.x + transform.position.x , transform.position.y + colliderBottomLeft.y) ,
new Vector2(colliderBottomRight.x + transform.position.x , transform.position.y + colliderBottomRight.y) ,
Layer$$anonymous$$ask.NameToLayer("Solid") );
onGround = hitSolid;
Your answer
Follow this Question
Related Questions
Physics2D.CircleCast produces no result whenever a layer mask is specified 1 Answer
Raycast Layermask doesn't ignore no layered Parent? 1 Answer
Layers and UI not behaving as expected. 1 Answer
How to create User layer that acts like the "Ignore Raycast" layer? 1 Answer
How to use Physics2D.OverlapArea 2 Answers