728x90
스크립트상에서 아래와 같은 함수를 사용할 때 이진법 숫자 $1$을 레이어 번호만큼 시프팅 해서 사용해야 하는데, 왜 굳이 이렇게 사용하는 걸까요?
Physics2D.OverlapCircleAll(this.transform.position, 5.0f, 1 << LayerMask.NameToLayer("Player"));
레이어마스크라는 이름에서도 알 수 있듯이 우리가 "NameToLayer" 함수를 통해 얻어온 것은 마스킹을 위한 숫자이지 레이어 그 자체가 아닙니다. 아래 사진을 보면 현재 플레이어의 레이어번호는 $3$번입니다.
이는 사실 $2^3$을 의미합니다. $2^3$은 $8$을 의미하고 $8$은 이진법으로 $1000$이죠. 이는 위에서 본 이진법 숫자 $1$을 세 번 왼쪽으로 쉬프트 한 것과 동일한 수입니다.
따라서 이 레이어번호들은 $2$의 승수들이고, 이 수들은 아시다시피 커질때마다 비트에서 $1$이 왼쪽으로 한 칸씩 이동하게 됩니다. 이런 방식은 아래와 같은 방법으로 여러 레이어를 식별할 수 있게 해 줍니다.
(1 << LayerMask.NameToLayer("Player")) | (1 << LayerMask.NameToLayer("Water")) ;
위 코드는 $1000$과 $10000$을 | 연산한것이 되고 따라서 $11000$이 되게 됩니다. 이는 비트마스크로 활용이 되어 $3$번레이어와 $4$번레이어를 가진 오브젝트에만 물리연산을 하겠다는 의미로 사용할 수 있습니다.
728x90
반응형
'Unity > Tip' 카테고리의 다른 글
눈누 폰트로 유니티 TextMeshPro Font Asset 만드는 방법 (0) | 2023.09.03 |
---|---|
[컴포넌트 알아보기] 캔버스 스케일러(Canvas Scalar) (0) | 2023.08.20 |
Sprite와 Texture의 차이 (0) | 2023.06.22 |
S.O.L.I.D 원칙을 유니티 개발에 적용해보자. (0) | 2023.06.12 |
URP환경에서 그림자 퀄리티를 개선하는 방법 (0) | 2023.03.19 |