Unity입력과 물리

Physics LayerMask와 Collision Matrix

충돌과 레이캐스트를 정확하고 싸게 만들기 위한 Unity LayerMask와 Collision Matrix의 역할을 정리합니다.

마지막 수정 2026년 3월 21일

기본 패턴

csharp
[SerializeField] private LayerMask targetMask;

if (Physics.Raycast(origin, direction, out RaycastHit hit, 100f, targetMask))
{
    Debug.Log(hit.collider.name);
}

설명

  • Layer는 "이 오브젝트를 어떤 그룹으로 취급할 것인가"를 정하는 시스템이고, Collision Matrix는 그 그룹끼리 실제 충돌 계산을 할지 말지를 정하는 전역 규칙입니다.
  • LayerMask는 특히 레이캐스트나 오버랩 쿼리에서 중요합니다. 모든 Collider를 다 보는 대신 필요한 레이어만 보게 하면 정확도와 비용이 함께 좋아집니다.
  • 충돌이 이상하게 안 나거나 너무 많이 나면 코드보다 먼저 Layer와 Matrix를 보는 편이 좋습니다. 물리 버그 상당수가 여기서 시작됩니다.
  • 플레이어, 적, 투사체, 상호작용 오브젝트, UI용 3D 오브젝트를 레이어로 분리하면 Raycast와 Trigger 로직이 훨씬 단순해집니다.
  • Layer는 단순 분류표가 아니라 "물리/쿼리/렌더링 선택 기준"이므로, 프로젝트 초기에 팀 규칙으로 잡아 두는 편이 장기적으로 유리합니다.

빠른 정리

항목역할
Layer오브젝트 분류
Collision Matrix레이어 간 충돌 허용 여부
LayerMask쿼리에서 볼 레이어 집합
Raycast 필터링필요한 대상만 검사
디버깅 순서콜백/레이캐스트 이상 시 레이어부터 확인

주의할 점

레이어를 나중에 아무 기준 없이 늘리기 시작하면, 어떤 시스템이 어떤 레이어를 기대하는지 금방 흐려집니다. "충돌용", "레이캐스트용", "렌더링 구분용"을 최소한 문서로라도 먼저 나눠 두는 편이 좋습니다.

참고 링크

3 sources