Ssssong += Dev

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

개발/공부

[유니티, 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 연산자는 뺄 때라 생각하면 편하다.

'개발 > 공부' 카테고리의 다른 글

[C#] 인터페이스  (0) 2022.05.16
[유니티] Raycast  (0) 2022.05.10
[C#] 구조체와 클래스의 값 복사  (0) 2022.05.09
피보나치 수열, 하노이 탑, 링크드리스트, 배열형 스택  (0) 2022.05.02
[C#, 유니티] Coroutine  (0) 2022.04.14