UI(User Interface)는 게임의 사용자가 게임에 가장 직접적으로 마주하는 첫 번째 상호작용 요소이다. 게임을 떠나 어떤 프로그램이든 UI가 존재하고, 사용자는 UI에 가장 민감하다고 표현해도 무방하다.
프로그래머로서 우리는 UI가 화면에 그려지는 과정을 이해하고 알맞은 최적화 방법을 추론할 수 있어야 한다. 따라서 유니티에서 UI가 생성될 때 어떤 요소로 구성되어 있고, 이를 적은 연산으로 최대의 효율을 낼 수 있도록 고민을 해야할 것이다.
cf) UGUI / NGUI
UGUI가 없던 시절 NGUI를 통해 오로지 스크립트로만 UI를 구현을 했다. 따라서 적은 리소스를 활용하는 경량화된 게임에서 NGUI를 사용하지만, 대부분의 게임의 경우 현재 Unity에서 제공하는 UGUI를 사용한다.
유저는 UI를 통해 프로그램으로부터 원하는 결과를 얻는다. 따라서 UI는 사용 환경에 따라 다양한 해상도에 유연하게 적용되어야하며, 이는 UI를 구성함에 있어 가장 핵심적인 요소이다. 하지만 UI 구조를 효과적으로 설계하고 적용하는 것은 생각보다 어려운 일이며 추후의 유지보수, 업데이트와 같은 확장성을 고려한 객체 지향적 설계가 적용되어야하는 중요한 요소이다.
Canvas
Image나 Text 등의 UI 요소들을 하위 객체로 가지는 기본 요소로 도화지 역할을 한다.
Render Mode
UI Scale Mode(Canvas Scaler)
Graphic Raycaster
Rect Transform
Canvas
Unity에서 UI를 관리할 때는 하나의 Canvas가 아닌 여러 개의 Canvas를 동시에 활용하기도 한다.
Canvas는 내부적으로 UI 요소가 변경될 때 전체 레이아웃을 다시 계산한다. 따라서 자주 변경되는 UI와 잘 바뀌지 않는 UI요소를 분리하여 서로 다른 Canvas로 관리하는 것이 비용을 최소화시킬 수 있다.
여러 Canvas를 사용할 경우 Sorting Order를 설정해서 UI 계층을 강제할 수 있다. 따라서 렌더링 순서를 조절하여 어떤 UI 요소를 더 위에 위치시킬지를 다중 Canvas를 통해 쉽게 설정이 가능하다.
위에서 설명한 Render Mode가 다른 UI 요소가 함께 존재하는 경우 별도의 Canvas가 필요하다. 따라서 Overray Mode와 World Space Mode를 함께 사용하는 경우 다중 Canvas로 구현한다.
게임 전반적으로 유지되는 UI와 씬에서만 존재하는 UI를 구분하는 경우에도 Canvas를 나누어 관리한다. DontDestroyOnLoad로 유지되는 UI 요소들과 씬에 종속된 UI를 구분하여 서로 다른 Canvas로 구성하는 것이다.
Layout Component
Grid Layout Group
하위 UI 요소들을 더욱 편리하게 배치할 수 있도록 도움을 주는 Layout 컴포넌트이다.
Content Size Fitter
하위 UI 요소들에 의해 상위 UI 요소의 크기가 결정되도록 하는 컴포넌트이다.
Layout Element
하위 UI 요소 중 하나여도 Layout 설정에 대해 예외사항을 설정할 때 사용하는 컴포넌트이다.