UI Optimization Strategies: Unity Performance Issues & Solut

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단계

  1. 레이아웃 계산

- UI 요소 위치 및 크기 기반 의존성 체인 생성

  1. 배치(Batching)

- 병합된 요소 렌더링으로 성능 향상 (작은 요소보다 큰 요소 렌더링 효율적)

  1. 렌더링

- 배치 수 감소로 렌더링 시간 단축 (배치 수와 렌더링 속도 반비례)

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 비활성화로 대체 권장)

결론

  • SubCanvasFillAmount 사용으로 레이아웃 재구성 최소화
  • Layout Group 대신 Vertical/Horizontal Layout GroupContent Size Fitter 활용
  • TextMeshPro 사용 시 텍스트 변경이 레이아웃 재구성 유발 → Canvas Group 비활성화로 대체 가능
  • Unity 2022.3 이상 버전에서 Animator 사용 시 레이아웃 재구성 방지 기능 지원