LayerMask의 정의:
LayerMask의 역할:
32비트 정수 구조:
00000000 00000000 00000001 00000000 (2^8 = 256)00000000 00000000 00000010 00000000 (2^9 = 512)비트 연산 활용:
int mask = (1 << 8); // 8번 레이어 선택|(OR 연산)을 사용해 여러 레이어를 조합합니다.int mask = (1 << 8) | (1 << 9); // 8번과 9번 레이어 결합비트 플래그 예제:
int mask = (1 << 8) | (1 << 9);
// 결과: 00000000 00000000 00000011 00000000 (십진수: 768)
성능 최적화:
Mesh Collider와의 연산 감소:
렌더링 최적화:
int mask = (1 << 8); // 8번 레이어
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100.0f, mask))
{
Debug.Log($"Raycast 충돌 @ {hit.collider.gameObject.name}");
}
코드 분석:
1. (1 << 8)
Physics.Raycast의 네 번째 인자:mask는 Raycasting의 대상 레이어를 지정합니다.int mask = (1 << 8) | (1 << 9); // 8번과 9번 레이어
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100.0f, mask))
{
Debug.Log($"Raycast 충돌 @ {hit.collider.gameObject.name}");
}
코드 분석:
1. (1 << 8) | (1 << 9)
LayerMask mask = LayerMask.GetMask("Monster", "Wall"); // "Monster"와 "Wall" 레이어
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100.0f, mask))
{
Debug.Log($"Raycast 충돌 @ {hit.collider.gameObject.name}");
}
코드 분석:
1. LayerMask.GetMask
| 특징 | LayerMask | Tag |
|---|---|---|
| 구조 | 32비트 비트 플래그 | 문자열 기반 |
| 구분 가능 개수 | 최대 32개 레이어 | 제한 없음 |
| 목적 | 물리 연산 및 렌더링 최적화 | 오브젝트 그룹화 |
| 활용 예 | Raycasting, Culling Mask | 특정 오브젝트 검색 (e.g., FindWithTag) |
int mask = (1 << 6); // Monster 레이어 (6번)
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100.0f, mask))
{
Debug.Log($"Raycast @ {hit.collider.gameObject.name}");
}
LayerMask mask = LayerMask.GetMask("Monster") | LayerMask.GetMask("Wall");
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100.0f, mask))
{
Debug.Log($"Raycast @ {hit.collider.gameObject.name}");
}
// 직관적인 코드
LayerMask mask = LayerMask.GetMask("Monster", "Wall");
// 비트 연산을 사용한 코드
int mask = (1 << 6) | (1 << 7);
Raycasting 최적화:
Culling Mask: