レイヤーマスク

レイヤーマスク


レイヤーマスクを利用すると判定のマスキングを行う事ができる

レイヤーマスクは基本ビット操作。ビットを見ているのでビットシフトとの併用が必須
0か1で値を0にすると判定がすべてfalseになる(見た目で衝突していても常にfalseになる)
0にするとすべて無視 0000 0x0000
1にするとDefault以外無視 0001 0x0001
2にするとTransparent以外無視 0010 0x0002
3にするとDefaultとTransparent以外無視 0011 0x0003
4にするとIgnoreRaycast以外無視 0100 0x0004
5にするとDefaultとIgnoreRaycast以外無視 0101 0x0005
...    
つまりビットが0で無判定、1で判定する    

複数のレイヤーを判定可能にしつつ他を無視させる場合

int layerMask = (1 << LayerMask.NameToLayer ("Layer9Col")) + (1 << LayerMask.NameToLayer ("Layer10Col"));
print (Physics.Raycast (this.transform.position, Vector3.forward, 10.0f, layerMask));

上記の場合、Layer9ColとLayer10Col以外は無視される
特定レイヤーだけを無視させたい場合

int layerMask = ~ (1 << LayerMask.NameToLayer("Character Layer"));
print( Physics.Raycast(this.transform.position,Vector3.forward,10.0f,layerMask));

上記の場合、判定判断は「Character Layer」に割り当てたオブジェクトに対し無視するようになる
(値が「~ 」によりNOT(否定)されていることに注目)


・自分と同一のレイヤー以外無視して判定

int layerMask = (1 << gameObject.layer);
print( Physics.Raycast(this.transform.position,Vector3.forward,10.0f,layerMask));

・自分と同一のレイヤー以外のすべてを判定する

int layerMask = ~(1 << gameObject.layer);
print( Physics.Raycast(this.transform.position,Vector3.forward,10.0f,layerMask));

メニュー



  • 最終更新:2014-06-13 10:53:38

このWIKIを編集するにはパスワード入力が必要です

認証パスワード