본문 바로가기

유니티

[Unity] 레이어 마스크(Layer Mask)

문자열로 레이어 지정

gameObject.layer = LayerMask.NameToLayer("Player");

 

레이어 마스크(Layer Mask)

LayerMask -1 = Everything

LayerMask  0 = Nothing

LayerMask  1 = Default

 

NameToLayer로 마스크 설정

playerMask = LayerMask.GetMask("Player"); //플레이어 마스크 지정
//playerMask = 1 << LayerMask.NameToLayer("Player");  

monsterMask = LayerMask.GetMask("Monster"); //몬스터 마스크 지정
//monsterMask = 1 << LayerMask.NameToLayer("Monster");

GetMask에서 내부적으로 NameToLayer를 이용하여 레이어마스크를 구해줌

2개 이상 LayerMask 지정

playerMask = 1 << LayerMask.NameToLayer("Player");
monsterMask = 1 << LayerMask.NameToLayer("Monster");

layerMask = playerMask | monsterMask;

특정 LayerMask 빼기

playerMask = LayerMask.GetMask("Player");
monsterMask = LayerMask.GetMask("Monster");	

//플레이어 마스크만 제외
layerMask &= ~playerMask;

//2개이상 제외
layerMask &= ~(playerMask | monsterMask);

 

playerMask

0 0 1 0 0 0 0 0

monsterMask

0 0 0 0 0 1 0 0

playerMask | monsterMask

0 0 1 0 0 1 0 0

~(playerMask | monsterMask)    (모든 비트 반전)

1 1 0 1 1 0 1 1

layerMask

0 0 1 1 1 1 0 0

layerMask &= ~(playerMask | monsterMask)    (양쪽 비트가 모두 1일때만 true)

0 0 0 1 1 0 0 0