유니티 UI 최적화하는 방법에 대해서

해당 글은 아래 유니티 블로그에 나온 글을 정리한 것입니다.

 

Optimize your mobile game performance: Get expert tips on physics, UI, and audio settings | Unity Blog

You might have UI elements that only appear sporadically in the game (e.g., a health bar that appears when a character takes damage). If your invisible UI element is active, it might still be using draw calls. Explicitly disable any invisible UI components

blog.unity.com


캔버스 나누기

캔버스 안에 UI 요소가 많은 경우(버튼이 많거나, Text가 많거나 등), 모든 UI 요소를 하나의 캔버스에 넣는 것보다 여러 캔버스에 나눠서 작업하는 것이 효율적입니다. 캔버스를 나누게 되면, 하나의 UI 요소가 변경될 때 모든 UI 요소를 담고 있는 전체 캔버스를 다시 그릴 필요 없이, 변경된 UI요소를 담고 있는 캔버스만 변경시키면 됩니다.

 

예를 들어, 점수와 같이 자주 업데이트되는 요소는 별도의 캔버스에 두고, 메뉴 버튼과 같이 거의 변경되지 않는 요소는 다른 캔버스에 두는 것이 좋습니다.


사용하지 않는 & 보이지 않는 UI 요소는 숨기기

사용하지 않거나 보일 필요 없는 UI의 경우 비활성화하는 것이 성능상 이점을 얻을 수 있습니다.

 

UI 요소 비활성화 : 캐릭터가 피해를 입을 때 나타나는 체력 표시줄과 같은 요소들은 활성화되어 있지 않을 때도 Draw Call을 일으킬 수 있습니다. 활성화 되지 않는 UI 요소들은 명시적으로 비활성화하고, 필요할 때만 다시 활성화하는 것이 좋습니다.

 

정적배칭과 Draw Call에 대해서

정적배칭을 사용하는 최적화 방법정적이란 말 그대로 움직이지 않는 것을 뜻하며, 움직이지 않는 정적 오브젝트에 활용하는 기법이다. 동일한 재질을 공유하는 오브젝트들을 일괄 처리해서 드

wlsdn629.tistory.com

Draw Call에 대해서는 위 포스팅을 참고해주세요!

 

Canvas 구성 요소 비활성화 / Alpha를 0으로 하면 보이지 않게 된

 

Canvas 구성 요소 비활성화 : 만약 Canvas의 가시성(Visibilty)만 꺼야 하는 경우, Canvas의 GameObject를 비활성화하는 대신 Canvas 구성 요소를 비활성화해야 합니다. 이렇게 하면 메시와 정점을 다시 빌드하는 시간을 절약할 수 있습니다. 즉, UI 요소가 보이지 않아도 그래픽 리소스를 계속 사용하는 것을 방지할 수 있습니다.

 


Raycast Target을 비활성화

Raycast Target

 

필요하지 않은 모든 UI Text와 Image에서 Raycast Target을 비활성화합니다. UI가 많은 요소로 복잡하다면 이러한 작은 변화만으로도 불필요한 계산을 줄일 수 있습니다.

 


World Canvas 및 Camera Space Canvas에 카메라 할당

Event   또는   Render Camera   필드

 

Event 또는 Render Camera 필드를 공백 으로 두면 불필요하게 비용이 많이 드는  Camera.main 사용하게 됩니다 .

가능하면 카메라가 필요하지 않으므로 Canvas RenderMode 에 Screen Space – Overlay를 사용하는 것이 좋습니다 .