개발/공부

[유니티, C#] layerMask와 비트연산자

ssong_dev 2022. 5. 9. 11:25

레이어

유니티의 layerMask는 int형으로 되어 있으며 각 레이어는 비트로 정보를 저장한다.

따라서 layerMask를 사용할 때에 비트 연산을 자주 사용하게 되는데,

그간 비트연산자를 사용할 일이 잘 없었으니 간단하게 정리해 두려 한다.

 

if (Physics.Raycast(transform.position, transform.forward, out hit, 10, (1<<7 | 1<<8)))
	{
		Destroy(hit.transform.gameObject);
	}

여기서 레이캐스트는 충돌 대상이 layer7과 layer8일 때 충돌을 인식하는데,

<< 는 시프트 연산자로 만약 1<<2일 경우 0001이 0100으로 비트를 이동한다.

 

OR 연산자인 | 는 만약 0001 | 0100일 경우 0101을 리턴한다. 

AND 연산자인 &는 0011 & 0110일 경우 0010을 리턴한다.

NOT 연산의 ~는 비트를 반전시킨다. ~0010 == 1101  해당 레이어 빼고 전부 선택 시 사용하면 좋다.

XOR 연산인 ^는 대응되는 비트가 서로 다를 때 1을 반환한다. 1101 ^ 0100 == 1001

 

유니티 레이어마스크에서 OR 연산자는 더할 때, XOR 연산자는 뺄 때라 생각하면 편하다.