콘텐츠로 이동

UGUI Layout Group 사용을 피해야 하는 이유

UI 요소가 자기 레이아웃을 dirty로 표시할 때마다 최소 한 번의 GetComponent 호출이 일어난다.

자식 UI 요소가 바뀌면 그 요소를 소유한 레이아웃 시스템이 무효화된다. 레이아웃 시스템은 레이아웃 요소 바로 위로 이어진 Layout Group들의 묶음이다. 여기서 레이아웃 요소는 Layout Element 컴포넌트만이 아니라 Image, Text, Scroll Rect도 포함한다. Scroll Rect는 Layout Group이기도 하다.

dirty 처리 때 호출되는 GetComponent는 부모에서 유효한 Layout Group을 찾는다. 찾으면 Layout Group이 더 없거나 계층 루트에 닿을 때까지 Transform 계층을 계속 올라간다. 즉 Layout Group 하나가 자식 레이아웃 요소의 dirty 처리마다 GetComponent 호출을 하나씩 늘린다. 중첩된 Layout Group이 특히 성능에 나쁜 이유다.

  • 콘텐츠가 동적이지 않으면 Layout Group을 쓰지 않고, 비율 레이아웃은 앵커로 잡는다.
  • 요소 수가 동적으로 바뀌는 자주 갱신되는 UI에서는 레이아웃을 계산하는 코드를 직접 작성한다. 변경마다 돌리지 말고 필요할 때만 실행한다.
  • Layout Group을 써야 한다면 동적 UI 배치를 마친 뒤 코드로 컴포넌트의 enabled를 꺼서 이후 갱신을 막는다.
  • Layout Group 중첩은 피한다.