[TIL-260209] LayerMask / Render Texture / UI 이해와 최적화

데비·2026년 2월 9일

본과정

목록 보기
52/79

오늘 배운 내용

- Layer Mask

- Render Texture

- UI 이해와 최적화


LayerMask

  • 레이어 마스크는 태그와 비슷하게 오브젝트들을 분류하여 관리할 수 있다.

- LayerMask 함수 종류

  1. LayerMask.GetMask
    레이어 이름으로 묶음을 생성하는 함수 Enemy 가 8번 레이어(Layer)
  LayerMask.GetMask("Enemy", "Obstacle")
  // Enemy 가 8번 레이어(Layer)라면?
  // 1 << 8 (값 256)
  1. LayerMask.NameToLayer 레이어의 인덱스(int)를 반환
LayerMask.NameToLayer("Enemy");
// int 반환값 = 8
  1. LayerMask.LayerToName 레이어의 이름(string)을 반환
LayerMask.LayerToName(8);
  1. LayerMask.Value 비트마스크 값을 나타냄. 주로 비트 연산 수행
int bitMask = enemyLayer.value | obstacleLayer.value; (OR 연산)

- 비트 연산의 원리

  • 1 << n: n번 레이어의 스위치를 켠다(ON)
  • | (OR): 필터에 레이어를 추가한다.
  • & (AND): 이 오브젝트가 포함되어 있다 (필터 역할)
  • ~ (NOT): 지정한 레이어 제외한 나머지 다 선택
layerMask = 7;
// 이진수 111 -> 0,1,2

layerMask = 7;

0000 0000 0000 0000 0000 0000 0000 0000 0111

layerMask = 1 << 7;

0000 0000 0000 0000 0000 0000 0000 1000 0000

- 특정 레이어 포함 여부 체크(& AND)

public static class Extensions
{
	public static bool Contains(this LayerMask mask, int Layer)
    {
    	return (mask.value & (1 << layer)) != 0;
    }
    
    public static bool Contains(this LayerMask mask, Gameobject obj)
    {
    	return (mask.value & (1 << obj.layer)) != 0;
    }
}
if (mask.Contains(obj, layer)) {}

시나리오 A. Monster/NPC를 때렸을 때, 공격 가능 여부 체크

(this LayerMask mask, GameObject obj)
if(mask.Contains(Enemy 마스크, 몬스터/NPC obj)) {//공격하기}
Enemy는 8번 레이어

mask 0000 0000 0000 0000 0000 0000 0001 0000 0000

1<< NPC 0000 0000 0000 0000 0000 0000 0000 1000 0000 &
0000 0000 0000 0000 0000 0000 0000 0000 0000 false (공격 무시)


~ (NOT) 연산자

~(1 << PlayerLayer)
// UI 레이어까지 포함

Q . 왜 비트마스크 방식을 사용할까?

if(target == "" || target == "" || target == "" || .....)

if(mask.Contains(target, layer)) {}

Render Texture

  • 카메라를 이용하여 화면에 이미지 영역을 지정해 이미지에 만들어진 카메라 뷰를 볼 수 있는 방법이다.

- 활용 방법

  • CCTV
  • 저격총 Scope
  • 미니맵등 활용

- 흐름 도식화

[Sub Camera] (촬영)Target Texture 설정
[Render Texture] (저장소/필름)
	↓ 에셋 참조
[Material / UI -> RawImage] (출력/액자)

UI 이해 최적화

1. UI의 기본 좌표: RectTransform

  • Anchor: 부모 해상도가 변할 때, 부모기준으로 상대위치를 결정
  • Pivot: 내가 회전하거나 커진 때, 어디를 기준으로 움직일 것인가 (자기 기준)

2. Canvas UI 처리 최소 단위

2-1. Canvas Render Mode

  • Screen Space-Overlay 카메라와 상관없이 화면 가장 위 레이어에 그림
  • Screen Space-Camera 특정 카메라 앞에 일정한 거리에 배치.
    -> 연출용 UI, 파티클이 섞인 UI
  • World Space 씬 내 3D 오브젝트처럼 활용하는 UI
    -> 오브젝트 체력, 데미지 등등
    2-2. Canvas Scaler
  • Constant pixel Size 해상도가 바뀌어도 UI가 사용하는 픽셀 수를 그대로 유지
  • Scale With Screen Size -> 모바일 게임 표준
  • Constant Physical Size 화면 해상도와 상관없이 cm/inch 크기를 유지하려고함.

주의 컴포넌트

  1. Layout Group
  2. Text 대안 -> Text Mesh Pro 사용하는 이유?
    -> UI가 변화하는 상황에 Text에 비해서 최적화 되어 있다.

Profiler 에서 UI 최적화 잡는법

  • Layout(파란색) -> UI 위치/크기 계산하는 시간
  • Render(노란색) -> 실제 메쉬 생성 시간

0개의 댓글