UI 최적화 전략: Unity에서의 성능 저하 원인 및 해결 방법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
앱 개발
대상자
Unity UI 개발자 및 게임 엔지니어 (중급~고급 수준)
핵심 요약
- Canvas 분할을 통해 레이아웃 재구성 최소화
- Layout Group 사용은 성능 저하 원인으로 피해야 함
- FillAmount 속성 사용이 RectTransform 조정보다 효율적
- SubCanvas 활용으로 변경 사항의 영향 범위 제한 가능
섹션별 세부 요약
1. Unity의 UI 최적화 권장사항
- Canvas 분할 (SubCanvas 사용)을 통해 계층 구조 복잡도 감소
- Raycast Target 제거로 UI 상호작용 성능 향상
- Large List/GridLayout 등의 비용 많은 요소 사용 회피
- Canvas 비활성화가 GameObject 비활성화보다 효율적
2. UI 렌더링 프로세스의 3단계
- 레이아웃 계산
- UI 요소 위치 및 크기 기반 의존성 체인 생성
- 배치(Batching)
- 병합된 요소 렌더링으로 성능 향상 (작은 요소보다 큰 요소 렌더링 효율적)
- 렌더링
- 배치 수 감소로 렌더링 시간 단축 (배치 수와 렌더링 속도 반비례)
3. 레이아웃 변경의 성능 영향
- 단일 요소 RectTransform 조정 → 0.2ms 부하 발생
- FillAmount 속성 변경 → 레이아웃 재구성 없이 부하 증가 없음
- SubCanvas 사용 시 변경 사항의 계층 구조 영향 제한 (부하 0.7ms로 감소)
4. SubCanvas vs. Layout Group 성능 비교
- 8개 요소 포함 레이아웃 그룹에서 SubCanvas 사용 시:
- 레이아웃 재구성 부하 70% 감소
- 배치 업데이트 부하 1.10ms 증가
- TextMeshPro 사용 시 레이아웃 재구성 비용이 일반 텍스트보다 높음
5. 애니메이터와 GameObject 활성화/비활성화 영향
- Animator를 통한 RectTransform 조정 → 레이아웃 재구성 유발 (Unity 2022.3 이상 버전에서 개선됨)
- GameObject 비활성화 → 레이아웃 재구성 유발 (Canvas Group 비활성화로 대체 권장)
결론
- SubCanvas와 FillAmount 사용으로 레이아웃 재구성 최소화
- Layout Group 대신 Vertical/Horizontal Layout Group과 Content Size Fitter 활용
- TextMeshPro 사용 시 텍스트 변경이 레이아웃 재구성 유발 → Canvas Group 비활성화로 대체 가능
- Unity 2022.3 이상 버전에서 Animator 사용 시 레이아웃 재구성 방지 기능 지원