Unity 레이어 여러개를 동시 검사

박성준·2025년 2월 17일

유니티 복습용

목록 보기
6/23
[SerializeField] private LayerMask levelCollisionLayer;

이런 변수로 유니티 인스펙터에서 레이어를 선택할 수 있다.
몬스터를 찾는다면 몬스터 레이어를 만들어서 해당 오브젝트에 할당하고 검사하는 경우가 많은데,
만약 몬스터만이 아닌 배경이라던가 여러 개의 레이어를 검사해야 하는 경우가 생긴다.
먼저 방법을 설멍하기 전에
LayerMask의 경우 레이어 종류만큼의 비트의 길이인 데이터다.
즉 BackGround,Player,Enemy가 레이어의 전체라면. 000.
레이어마스크가 Player를 가리킨다면 중간 값이니 010, Background일 경우 001, Enemy는 100이다.
이를 이용하여 검사해보자.
만약 Player와 Background. 두개의 값을 가진 레이어 마스크라면 110이 될텐데,

private void OnTriggerEnter2D(Collider2D collision)

이걸 이용해 충돌체의 정보를 받고

if (levelCollisionLayer.value == (levelCollisionLayer.value | (1 << collision.gameObject.layer)))

이런 식으로 값을 검사한다고 가정하자.
찾는 레이어가 Player라고 가정하면, levelCollsionLayer의 값은 010인데, collision으로 Enemy가 들어왔다. 이렇게 되면 찾는 레이어가 아니다. collsion.gameobject.layer는 int값이다. 가장 앞에 있는 레이어부터 0의 값으로 순차적으로 1씩 더해지는데. Enemy는 2의 값. 즉 1을 2만큼 쉬프트 연산하면 100. layermask로 표현했을 때의 값과 같다. 100과 010을 or연산하면 110이고 이를 010과 같은지 확인하면 틀리다는 결과를 얻을 수 있다.
찾는 레이어가 여러개여도 문제 없이 적용됨.

profile
GameDeveloper

0개의 댓글