Unity LayerMask로 Layer 일치 판별?

정찬호·2023년 4월 27일

기존코드

public LayerMask targetLayer;
void OnTriggerEnter(Collider other)
{
if(targetLayer!=other.gameObject.layer)
return;
onTriggerEnterEvent.Invoke();
m_EnterHasBeenTriggered=true;
m_ExitHasBeenTriggered=false;
}

요 며칠동안 안 풀리는 문제가 있었습니다.
물체가 트리거에 들어왔을 때 특정 레이어에 속한 물체일 경우에만 반응하도록 코드를 짰었는데, 설정한 레이어의 물체가 들어와도 아무 반응이 없더군요.
왜 이러지? 싶어서 찾아보니..

gameObject.Layer

gameobject.layer는 게임 오브젝트의 레이어의 순서를 의미하는 숫자 형식으로 레이러를 지정

LayerMask

비트 플래그, 비트로 각각의 레이어를 상징하며 구분함.

한 번 스크립트에서 비교시켜봐야지 했는데.. 애초에 비교하면 안 될 걸 비교하고 있었네요.

Layer와 LayerMask를 비교시키려면

if(gameObejct.layer==LayerMask.NameToLayer("레이어 이름")){
}

같은 방식으로 LayerMask의 NameToLayer로 레이어 이름에 해당하는 레이어 전달하여 비교시켜야 한다고 합니다.

전 그냥 비교 코드를 제거하고, 프로젝트 세팅에서 트리거가 달린 물체의 레이어가 목표 물체의 레이어와만 반응하도록 설정하여 해결했습니다.

참고자료
https://ansohxxn.github.io/unitydocs/layermask/
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=pxkey&logNo=221324326124

profile
게임 개발 지망생입니다.

0개의 댓글