Search Unity

Problem with LayerMasks

Discussion in 'Scripting' started by SecretItemGames, Sep 3, 2014.

  1. SecretItemGames

    SecretItemGames

    Joined:
    Apr 13, 2012
    Posts:
    32
    Hi,

    I am having some problems working with Layermasks.
    I want to create a Layermask which only interacts with the Layer of the gameobject and another Layer which is always 4 Layers below the gameobject Layer.
    However I can´t use specific Layer numbers since my gameobject has to switch Layers all the time.
    Would love if someone can help me out.

    Code (CSharp):
    1. bool CollisionCheck(Vector2 v2StartOffSet, Vector2 v2EndOffSet)
    2. {
    3.     //This is the part I can´t figure out
    4.     int iWorldLayer = gameObject.layer - 4;    //Currently Layer: 11
    5.     int iPlayerLayer = gameObject.layer;    //Currently Layer: 15
    6.  
    7.     int iTargetLayer = iWorldLayer | iPlayerLayer;
    8.     LayerMask lmTargetLayer = 1 << iTargetLayer;
    9.  
    10.  
    11.  
    12.  
    13.  
    14.  
    15.     Vector2 v2LineStart = (Vector2)gameObject.transform.position + v2BoxColliderCenter + v2StartOffSet;
    16.     Vector2 v2LineEnd = (Vector2)gameObject.transform.position + v2BoxColliderCenter + v2EndOffSet;
    17.  
    18.     if(bRenderRaysInEditor == true)
    19.     {
    20.         Debug.DrawLine(v2LineStart, v2LineEnd, Color.blue);
    21.     }
    22.  
    23.     RaycastHit2D Hit;
    24.     Hit = Physics2D.Linecast(v2LineStart, v2LineEnd, lmTargetLayer);
    25.     return Hit;
    26. }
     
  2. hpjohn

    hpjohn

    Joined:
    Aug 14, 2012
    Posts:
    2,190
    Close

    Code (CSharp):
    1. LayerMask A = 1<< worldLayer
    2. LayerMask B = 1<<playerLayer
    3. layermask Both = A | B