본문 바로가기

Unity/UI

[Unity] UI 순서 우선순위

문제

인벤토리 구현 도중, 우선순위와 관련한 문제와 맞닥뜨렸다.

상세정보 창이 다른 슬롯에 가려진다.

그냥 오브젝트였다면 Sorting Layer를 조절해 해결했겠지만, UI의 Image 컴포넌트엔 그런 게 없었다.

아래 방법을 시도해봤으나 실패했고, 다양한 시도를 하며 해결법을 공유하려 한다.

  • z축 조절
  • Layer 변경

결론만 빠르게 보고 싶다면 스크롤을 내려 결론 탭을 찾아가면 좋다.


환경

우선 문제 발생 당시 인벤토리 환경은 다음과 같았다.

좌: 계층 관계 / 우: Inventory의 Inspector

하나의 캔버스 내에 인벤토리에 Grid Layout Group을 넣고, 그 아래 슬롯 오브젝트를 30개 배치했다. 모두 같은 오브젝트며, 슬롯은 아이콘을 띄울 Slot Item과 상세정보를 띄울 Info가 순서대로 배치돼있다.

Info는 Slot의 자식 오브젝트이기에 캔버스를 분리할 순 없었다.


시도 1

상술했듯, z축을 옮겨보고 Layer도 바꿔보았으나, 아무 효과가 없었다.

좌: 6번 레이어로 Float UI를 생성하고 적용해보았다. / 우: z축 조정한 모습. UI, Float UI 모두 시도해보았다.

 

 

 

시도 2

계층 관계를 적당히 바꿔보았다.

좌: 적당히 슬롯 사이로 Info를 옮긴 모습 / 우: 더 개판이 된 모습

그러나 효과는 있었다. Slot (6)까지는 상세정보창에 가려지고, Slot (7)부터 가려졌다.

계층 관계에 문제가 있는 건 확실해보였다.

 

 

 

시도 3

혹시 Inventory의 Grid Layout Group이 문제일까? 싶어 지워보았지만, 아무 변화도 없었다.

 

 

 

시도 4

컴포넌트를 뒤적거리던 중, Sorting Group이란 친구를 발견했다.

매뉴얼을 찾아보니 스프라이트 렌더러가 있는 오브젝트에만 적용된다. UI엔 당연하다는 듯 아무 일도 일어나지 않았다.

하지만 플레이어가 여럿일 때 묶을 수 있다고하니, 언젠가 요긴하게 써먹어야겠다.

 

 

 

시도 5

검색과 공부 끝에 알아낸 거라면, 유니티 UI의 정렬 순서는 오직 계층 구조에 따라 결정된다는 것이다.

그렇기에 그냥 구조를 개선하는 것으로 이 문제를 해결하기로 했다.

 

 

 


결론

UI의 정렬 순서가 오직 계층 구조(와 캔버스 우선 순위)에만 의존하니, 해당 UI를 분리시킬 필요가 있어보였다. 상세정보창을 유일 객체로 변경하고, 각 슬롯이 이 창에 접근해 정보를 변경한 후 위치를 옮기는 것으로 해결했다.

좌: 캔버스 분리, 우: 해결된 모습

이에 따라 InfoWindow를 싱글톤으로 구현하고, 필요할 때 슬롯이 아이템 데이터와 위치를 넘겨주는 식으로 처리했다.


참고 문헌