집게사장의 꿈

[Unity]유니티 UI 최적화 본문

유니티

[Unity]유니티 UI 최적화

Krapboss 2023. 11. 25. 18:20

1.Canvas를 분리할 것

UI는 Canvas 단위로 Draw되며, 동적인 UI와 정적인 UI를 구분하여 분류해 놓으면 좋다.

Canvas 안에 하위에 있는 UI들은 모두 하나의 버퍼로 처리 되며, 작은 것이 하나 바뀌더라도  모두 다시 그려진다



2. 사용하는 UI Image들의 Bacth를 줄여라

-각각의 이미지가 모두 분리되어 있으면 각각의 이미지에 대해 Bacth가 일어난다.

-Project_Altras로 사용하는 이미지들을 분류하여 넣어서 사용한다.





3. Canvas의 Pixel Perfect는 작업이 무겁다.

동적인 오브젝트는 PixelPerfect가 무거운 연산이기에, 프레임 드랍이 일어난다.

티가 많이 나는 캔버스를 사용하는 쪽에는 사용하고, 동적인 오브젝트를 해제하는 것이 좋다.





4.Animator는 내부에서 키 프레임이 돌아가기 때문에 UI가 지속적으로 갱신된다.

항상 동적으로 움직이는 UI의 경우에는 Animator를 사용해도 된다.

평소에는 정적이지만, 이벤트성으로 변경되는 UI는 스크립팅쪽으로 활용해라.





5. Cavas Raycaster는 필요한 곳에서만 사용해라

Graphic Raycaster는 입력을 UI 이벤트로 변환하는 컴포넌트

Graphic Raycaster는 하위 오브젝트를 모두 Raycast 대상으로 취급

화면의 모든 입력 지점을 반복하여 UI의 RectTransform이 있는지 확인한다.

잠재적인 오브헤드 발생



6. Full Screen UI에 의해 3d 오브젝트가 가려져 있어도, 그려진다.

방법 1 . 카메라를 아무것도 없는 쪽으로 돌려준다.

방법 2 . 카메라를 별도의 UI 전용의 카메라를 만들어라.





7. 같은 Z 값에 UI가 존재하지 않는다면 Bacth가 깨진다.

서로 다른 Z 값에 UI가 존재하면 각 Z 값 별로 UI가 처리된다.





8. Text를 Icon으로 대체하라
Text는 Batching이 깨질 확률이 높아진다.

Text는 다른 머티리얼을 사용하기에 같은 Z축에 위치시켜도 서로 다르게 취급되기에 배칭이 깨질 위험이 있다.




9.Text대신 TextMeshPro를 사용하라.

미리 텍스처를 Altras로 제작해서 사용

모바일에서는 altras resoultion이 커지면 대역폭 문제가 발생할 수 있음.





10. Xcode & Instument를 사용하여 아이폰 프로파일이 가능하다.

유니티 프로파일러로 보여주지 못하는 부분까지 자세히 확인 가능