1. 캔버스 분할
Canvas 하나에 수 많은 UI가 있다면 그 UI 요소 하나만 변경해도 전체 메시를 다시 생성하게 되는 부하가 생긴다 => Canvas에 있는 UI를 유사한 속성끼리 분류해서 Sub Canvas를 만들어서 사용한다. 그렇다고 UI를 너무 디테일하게 분류하여 Canvas를 여러개 만들면 그거 또한 부하가 생긴다.
2. 불필요한 Raycast Target 없애기
UI 컴포넌트를 붙이면 자동으로 Raycast Target이 켜져있는데 불필요한 컴포넌트까지 충돌검사를 하는 문제가 생긴다.
3. Camera.main 사용 제거
이벤트를 수신할 때 어느 카메라가 기본인지 확인하기 위해 매 프레임 부하가 발생한다. Camera.main을 사용하기 보다는 캐싱해서 사용하거나 프리팹에 할당해서 사용한다.
4. UI에서 애니메이터 사용 자재
애니메이터는 멈춤 없이 계속 플레이 되기 때문에 UI 오브젝트가 계속 변경됨에 따라 Canvas에 부하가 생긴다.
5. 배치 줄이기
Sprite Atlas를 이용해서 DrawCall 줄이기. 저사양 모바일 기기에서도 괜찮은 퍼포먼스로 렌더링 하려면 Batches가 100이하로 유지되는 게 좋다.
6. Text보단 TextMeshPro 사용하기
TextMeshPro는 폰트 이미지를 Bake하여 사용하는 개념으로 Sprite Atlas 처럼 한 장의 폰트 이미지를 공유하여 텍스트를 렌더링 할 수 있다. 또한, 자간 설정, Outline 처리, 해상도 저하 없음 등 기본 Text 대비 효율이 좋기 때문에 TextMeshPro사용을 권장하다.
7. Canvas 내에서 Instantiate 함수 사용 최소화
UI Item을 동적으로 생성할 때 Instantiate 함수를 사용하여 캔버스 내 아이템들을 생성하는 경우, 캔버스가 다시 렌더링 되면서 순간 멈춤 현상 등이 발생할 수 있으며, Instantiate 함수는 비용이 큰 함수라 최대한 Canvas 내에서 사용을 자제해 주는 것이 좋다. 필요 시 항상 오브젝트 풀링 기법을 통해서 최소한으로 생성한 후 공유해서 사용하는 것이 좋다.
[Unity] UI를 위한 UGUI 최적화 방안
Unity UI에서 사용하는 UGUI의 최적화 방안과 성능 향상을 위한 방안에 대해 알아보자. Unity에서 UI 구성시 아직까지는 UGUI를 이용하여 UI 요소를 화면에 배치하고 화면을 구성하는 것이 일반적이다.
wonjuri.tistory.com
'게임개발 > 스터디' 카테고리의 다른 글
[스터디] 코루틴이란? (0) | 2024.05.12 |
---|---|
[스터디] 인터페이스 vs 추상 클래스 차이 (0) | 2024.05.12 |
[스터디] 팩토리 패턴이란? (0) | 2024.05.12 |
[스터디] 부동소수점 오차가 나는 이유 (0) | 2024.05.11 |
[스터디] 개발 시 편의 기능 (0) | 2024.05.07 |