• 게임
  • 산업 분야
  • 리소스
  • 커뮤니티
  • 학습
  • 문의하기
개발
Unity 엔진
모든 플랫폼 위한 2D 및 3D 게임 제작
다운로드플랜 및 가격
수익화
인앱 결제/인앱 구매(IAP)
스토어 간 IAP 검색 및 관리
Mediation
수익 / 매출 극대화 및 수익화 / 수익 창출 최적화(하다)
Ad Quality
앱 유저. '광고 지면'의 타겟 고객 경험 보호
탭조이
장기적인 유저. '광고 지면'의 타겟 고객 충성도 구축
모든 수익화 / 수익 창출 제품
사용자 확보
사용자 확보
모바일 사용자를 검색하고 Acquire
Unity 벡터 AI
적합한 게임으로 플레이어 연결
Aura 디바이스 단위 광고
최대 참여/인게이지먼트 시 기기 내 사용자 도달률
모든 성장 제품
활용 부문
3D 협업
실시간 3D 프로젝트 빌드 및 검토
몰입형 교육
몰입도 높은 환경 제작
고객 경험
인터랙티브 3D 경험 제작
모든 업계 솔루션
산업 분야
제조업
운영 우수성 확보
리테일
상점 경험을 온라인 경험으로 전환
자동차
혁신 및 차량 내 경험 향상
전체 산업 분야
테크니컬 라이브러리
기술 자료
공식 유저. '광고 지면'의 타겟 고객 매뉴얼 및 API 레퍼런스
개발자 툴
릴리스 버전 및 이슈 트래커
로드맵
예정된 기능 검토
용어집
기술 용어 라이브러리
분석 자료
활용 사례
실제 성공 사례
베스트 프랙티스 가이드
전문가 팁
모든 리소스
새로운 기능
블로그
업데이트, 정보, 기술 팁
뉴스
뉴스, 스토리, 보도 센터
커뮤니티 허브
토론
토론, 문제 해결, 소통
이벤트
글로벌 이벤트 및 현지 이벤트
커뮤니티 사례
Made with Unity
Unity 크리에이터 소개
Livestreams
개발자, 크리에이터, Insider와의 소통
Unity Awards
전 세계 Unity 크리에이터 축하
모든 레벨 지원
Unity Learn
무료로 Unity 기술 마스터
전문 교육
Unity 강사와 함께 팀의 역량을 강화하세요
Unity 처음 사용하시나요
시작하기
학습 시작하기
Unity 필수 학습 길잡이
Unity 사용이 처음이신가요? 여정 시작하기
사용법 가이드
실용적인 팁 및 베스트 프랙티스
교육
학생용
커리어 시작하기
교육 담당자 대상 교육
교육 효율 극대화
교육 라이선스
교육 기관에 Unity 강력한 기능 도입
자격증
Unity 숙련도를 입증하세요
지원 옵션
도움 받기
성공을 위한 Unity
Success 플랜
전문가 지원을 통해 더 빠르게 목표 도달률 달성
FAQ
일반적인 질문에 대한 답변
문의하기
유니티 팀과 소통하기
플랜 및 가격
언어
  • English
  • Deutsch
  • 日本語
  • Français
  • Português
  • 中文
  • Español
  • Русский
  • 한국어
소셜
통화
구매
  • 제품
  • 유니티 애즈
  • 구독
  • Unity 에셋 스토어
  • 리셀러
교육
  • 학생
  • 교육 담당자
  • 기관
  • 인증 시험
  • 레벨업 아카데미
  • Skills Development Program
다운로드
  • Unity Hub
  • 다운로드 아카이브
  • 베타 프로그램
Unity Labs
  • Labs
  • Publications
리소스
  • Unity 학습 플랫폼
  • 커뮤니티
  • 기술 자료
  • Unity QA
  • FAQ
  • Services Status
  • 활용 사례
  • Made with Unity
Unity
  • 회사
  • 뉴스레터
  • 블로그
  • 이벤트
  • 채용 정보
  • 도움말
  • Press
  • 파트너
  • 투자자
  • 어필리에이트
  • 보안
  • 소셜 임팩트
  • Inclusion & Diversity
  • 문의하기
Copyright © 2025 Unity Technologies
  • 법적 고지 사항
  • 개인정보처리방침
  • 쿠키
  • 개인정보 판매 또는 공유 금지

'Unity', Unity 로고 및 기타 Unity 상표는 미국 및 기타 국가에서 유니티 테크놀로지스 또는 계열사의 상표 또는 등록상표입니다(여기에서 자세한 정보 확인). 기타 명칭 또는 브랜드는 해당 소유자의 상표입니다.

Hero background image

Unity UI 최적화 팁

캔버스와 레이아웃 그룹을 분할하고, UI 오브젝트를 풀링하는 등의 팁을 통해 UI를 완전히 최적화(하다)하는 방법을 알아보세요.
이 웹페이지는 이해를 돕기 위해 기계 번역으로 제공됩니다. 기계 번역으로 제공되는 콘텐츠에 대한 정확도나 신뢰도는 보장되지 않습니다. 번역된 콘텐츠의 정확도에 관해 의문이 있는 경우 웹페이지의 공식 영어 원문을 참고해 주시기 바랍니다.
여기를 클릭하세요.

이 페이지는 PC 콘솔 게임을 최적화 (하다) 방법에 대한 뎁스 / 게재되고 있는 광고의 개수 가이드를 제공하는 여러 페이지 중 하나입니다. 무료 전자책인 콘솔 및 PC 게임 성능 최적화에서 80가지 이상의 실행 가능한 팁과 성능 최적화를 위한 베스트 프랙티스를 확인할 수 있습니다.

  • 캔버스 분할
  • 그래픽 레이캐스터 제한 및 레이캐스트 타겟 비활성화
  • 비용이 많이 드는 UI 요소 사용 지양
  • 가능하면 레이아웃 그룹 사용 지양
  • 스마트한 방식으로 풀 UI 오브젝트 구현
  • 캔버스를 숨기는 방법
  • UI 요소에서 애니메이터 사용 최적화
  • 전체 화면 UI를 사용할 때 나머지 모든 항목 숨기기
  • 리소스 더 보기
  • 더 자세한 내용은 전자책에서 무료로 확인하세요.

캔버스 분할

문제: UI 캔버스의 단일 요소가 변경되면 전체 캔버스가 더러워집니다.

캔버스는 Unity UI의 기본 구성 요소입니다. 캔버스에 배치된 UI 요소를 나타내는 메시를 생성하고, UI 요소가 변경되면 메시를 다시 생성하며, GPU에 드로우 콜을 발행하여 UI가 실제로 표시되도록 합니다.

이러한 메시를 생성하려면 많은 리소스가 소요될 수 있습니다. UI 요소는 드로우 콜이 가능한 한 적게 드로우되도록 배치로 수집해야 합니다. 배치 생성은 비용이 많이 들기 때문에 필요한 경우에만 다시 생성하려고 합니다. 문제는 캔버스에서 하나 이상의 요소가 변경되면 전체 캔버스를 다시 분석하여 요소를 최적의 방식으로 드로우해야 한다는 점입니다.

많은 사용자가 수천 개의 요소가 포함된 단일 캔버스에서 전체 게임 UI를 빌드합니다. 하나의 요소를 변경하면 CPU 스파이크가 여러 밀리초에 걸쳐 발생할 수 있습니다. 재건 비용이 너무 많이 드는 이유에 대해 자세히 알아보려면 이 Unite 세션에서 24:55 지점을 확인하세요.

솔루션: 캔버스를 분할하십시오.

각 캔버스는 요소와 다른 캔버스의 요소를 분리하는 섬입니다. 캔버스를 분할하여 여러 캔버스를 지원하는 UGUI의 기능을 활용하여 Unity UI 배칭 문제를 해결하세요.

또한 캔버스를 중첩할 수도 있습니다. 디자이너는 캔버스 전반에서 다양한 요소가 화면에 있는 위치를 고려하지 않고도 대규모 계층형 UI를 만들 수 있습니다. 자식 캔버스는 부모 캔버스와 형제 캔버스 모두에서 콘텐츠를 분리합니다. 자체 지오메트리를 유지하고 자체 배칭을 수행합니다. 갱신해야 하는 빈도에 따라 분할 방법을 결정할 수 있습니다. 정적 UI 요소는 별도의 캔버스에, 동시에 업데이트되는 동적 요소는 작은 하위 캔버스에 저장합니다. 또한 각 캔버스의 모든 UI 요소에 동일한 Z 값, 머티리얼, 텍스처가 있어야 합니다.

Graphic Raycaster 인터페이스

그래픽 레이캐스터 제한 및 레이캐스트 타겟 비활성화

문제: 그래픽 레이캐스터의 부적절한 사용

그래픽 레이캐스터는 입력을 UI 이벤트로 변환하는 컴포넌트입니다. 더 구체적으로는 화면의 클릭이나 터치 입력을 UI 이벤트로 변환한 다음 관심 있는 UI 요소로 전송합니다. 하위 캔버스를 포함하여 입력이 필요한 모든 캔버스에 그래픽 레이캐스터가 필요합니다. 또한 화면의 모든 입력 지점을 반복하여 UI의 RectTransform 내에 있는지 확인하여 잠재적인 오버헤드가 발생할 수 있습니다.

그래픽 레이캐스터는 이름에도 불구하고 레이캐스터가 아닙니다. 기본적으로 UI 그래픽스만 테스트합니다. 특정 캔버스에서 입력을 받는 데 관심이 있는 UI 요소 세트를 가져와 교차 점검을 수행합니다. 예를 인스턴스 Graphic Raycaster의 Canvas에서 각 UI 요소의 RectTransform에 대한 입력 이벤트가 발생하는 시점이 인터랙티브로 표시되었는지 확인합니다.

문제는 모든 UI 요소가 업데이트를 받는 데 관심이 없다는 점입니다.

솔루션: 상호 작용하지 않는 UI 캔버스에서 그래픽 레이캐스터를 제거하고 정적 또는 상호 작용하지 않는 요소의 경우 레이캐스트 타겟을 끌 수 있습니다.

특히 Raycast Target을 비활성화하는 버튼의 텍스트를 사용하면 Graphic Raycaster가 각 프레임에서 수행해야 하는 교차 점검의 수를 직접 줄일 수 있습니다.

문제: 때로는 그래픽 레이캐스터가 레이캐스터 역할을 합니다.

캔버스의 렌더 모드를 Worldspace Camera 또는 Screen Space Camera로 설정하면 블로킹 마스크를 추가할 수 있습니다. 블로킹 마스크는 레이캐스터가 2D 또는 3D 물리를 통해 광선을 드리우는지 여부를 결정하여 물리 오브젝트가 유저. '광고 지면'의 타겟 고객 UI와 상호 작용하는 능력을 차단하는지 여부를 결정합니다.

솔루션: 2D 또는 3D 물리를 통해 광선을 드리우는 것은 비용이 많이 들기 때문에 이 기능을 적극적으로 사용하세요.

상호 작용하지 않는 UI 캔버스에서 제외하여 그래픽 레이캐스터의 수를 최소화합니다. 이 경우에는 상호 작용 이벤트를 확인할 필요가 없습니다.

이 기술 자료에서 그래픽 레이캐스터에 대해 자세히 알아보세요.

그리드 인터페이스

비용이 많이 드는 UI 요소 사용 지양

문제: 대형 목록, 그리드 뷰 및 다수의 오버레이된 UI 요소는 비용이 많이 듭니다.

대형 리스트 뷰와 그리드 뷰는 리소스를 많이 소모하며, 수많은 UI 요소(카드 배틀 게임에 카드가 쌓여 있음)를 레이어링하면 오버드로우가 발생합니다.

솔루션: 다수의 오버레이된 UI 요소를 피합니다.

런타임에 레이어로 구성된 UI 요소를 더 적은 수의 요소와 배치로 병합하도록 코드를 커스터마이즈하세요.

수백 개의 아이템이 포함된 인벤토리 / 광고 지면 화면처럼 대형 목록 또는 그리드 뷰를 생성해야 하는 경우, 각 아이템에 하나의 UI 요소가 아닌 작은 UI 요소 풀을 재사용하는 것이 좋습니다.

이 GitHub 프로젝트에서 최적화된 스크롤 목록의 예를 확인해 보세요.

레이아웃 그룹 인터페이스

가능하면 레이아웃 그룹 사용 지양

문제: 레이아웃을 더럽히려고 하는 각 UI 요소는 최소 하나의 GetComponent 호출을 수행합니다.

레이아웃 시스템에서 하나 이상의 자식 UI 요소가 변경되면 레이아웃이 더티(dirty)가 됩니다. 변경된 자식 요소는 해당 요소를 소유하는 레이아웃 시스템을 무효화합니다.

레이아웃 시스템은 레이아웃 요소의 바로 위에 연속된 레이아웃 그룹의 집합입니다. 레이아웃 요소는 레이아웃 요소(UI 이미지, 텍스트, Scroll Rects) 컴포넌트뿐만 아니라, Scroll Rects가 레이아웃 그룹과 마찬가지로 레이아웃 요소로 구성됩니다.

현재 발생하는 문제는 다음과 같습니다. 레이아웃을 ‘더티’로 표시하는 각 UI 요소는 최소 하나의 GetComponent 호출을 수행합니다. 이 호출은 레이아웃 요소의 부모에 유효한 레이아웃 그룹을 찾습니다. 하나를 찾으면 레이아웃 그룹을 찾지 않고 계층 구조 루트에 도달할 때까지 트랜스폼 계층 구조를 계속 올라가게 됩니다. 따라서 각 레이아웃 그룹은 각 자식 레이아웃 요소의 지저분 프로세스에 GetComponent 호출 하나를 추가하므로 중첩된 레이아웃 그룹은 성능에 매우 저하됩니다.

솔루션: 가능하면 레이아웃 그룹을 피하세요.

비율 레이아웃에는 Anchors를 사용합니다. 동적 UI 요소 수가 많은 인기 UI의 경우 자체 코드를 작성하여 레이아웃을 계산하다 것이 좋습니다. 변경될 때마다 사용하지 않고 온디맨드로 사용하세요.

기술 자료에서 레이아웃 그룹에 대해 자세히 알아보세요.

오브젝트 풀링 인터페이스

스마트한 방식으로 풀 UI 오브젝트 구현

문제: 잘못된 방식으로 UI 오브젝트 풀링

UI 오브젝트를 재지정한 다음 비활성화하여 결합하는 경우가 많으므로 불필요하게 더티어싱이 발생합니다.

솔루션: 먼저 객체를 비활성화한 다음 풀로 다시 삽입합니다.

기존 계층 구조는 한 번 더러워질 수 있지만, 다시 계층 구조를 적용하면 이전 계층 구조를 두 번째로 더러워지지 않으며, 새로운 계층 구조도 더러워지지 않습니다. 풀에서 오브젝트를 제거하는 경우 먼저 다시 렌더링하고 데이터를 업데이트한 다음 활성화하세요.

Unity의 기본 오브젝트 풀링 개념에 대해 자세히 알아보세요.

UI Canvas 컴포넌트

캔버스를 숨기는 방법

문제: 캔버스를 숨기는 방법을 모르겠음

때로는 UI 요소와 캔버스를 숨기는 것이 좋습니다. 하지만 어떻게 하면 효율적으로 작업할 수 있을까요?

솔루션: 캔버스 컴포넌트 자체를 비활성화합니다.

캔버스 컴포넌트를 비활성화하면 캔버스가 GPU에 드로우 콜을 보내지 않게 됩니다. 그러면 캔버스가 더 이상 보이지 않습니다. 하지만 캔버스는 버텍스 버퍼를 폐기하지 않고 모든 메시와 버텍스를 유지합니다. 다시 활성화하면 재빌드가 트리거되지 않으며 다시 드로우하기만 하면 됩니다.

또한 Canvas 컴포넌트를 비활성화하면 Canvas 계층 구조를 통해 많은 리소스를 소모하는 OnDisable/OnEnable 콜백을 트리거하지 않습니다. 프레임당 코드를 많이 실행하는 자식 컴포넌트를 비활성화하는 것이 좋습니다.

캔버스 컴포넌트에 대해 여기에서 자세히 알아보세요.

UI 요소에서 애니메이터 사용 최적화

문제: UI에서 애니메이터 사용하기

애니메이터는 애니메이션의 값이 변하지 않더라도 프레임마다 UI 요소가 더미됩니다.

솔루션: UI 애니메이션에 코드를 사용합니다.

항상 변경되는 동적 UI 요소에만 애니메이터를 배치합니다. 이벤트에 따라 거의 변경되거나 일시적으로 변경되는 요소의 경우 자체 코드를 작성하거나 트위닝 시스템을 사용하세요. 에셋 스토어에서 이를 위한 다양한 훌륭한 솔루션이 있습니다.

전체 화면 UI를 사용할 때 나머지 모든 항목 숨기기

문제: 전체 화면 UI의 성능 저하

게임에 씬을 완전히 덮는 일시 정지 또는 시작 화면이 표시되면 게임의 나머지 부분은 여전히 백그라운드에서 렌더링되어 성능에 영향을 줄 수 있습니다.

솔루션: 나머지 모든 걸 숨겨.

씬의 다른 모든 요소를 덮는 화면이 있는 경우 3D 씬을 렌더링하는 카메라를 비활성화합니다. 마찬가지로 맨 위쪽 캔버스 뒤에 숨겨진 캔버스 요소도 비활성화합니다.

전체 화면 UI에서 FPS 업데이트할 필요가 없으므로 Application.targetFrameRate를 낮추는 것이 좋습니다.

리소스 더 보기

콘솔 및 PC 게임 성능 최적화 (하다)

Accelerate Success 웨비나: Unity UI Makeover

Accelerate Success 웨비나 팔로우업: Unity UI Makeover Q&A

카메라 사용으로 게임 성능 최적화(하다) 방법 – 1부

상위 GUI 에셋

지원, 서비스, 절감: Unity Pro 혜택 확인

게임 성능 최적화

더 자세한 내용은 전자책에서 무료로 확인하세요.

플레이어에게 최고의 게임 경험을 제공하세요. 80개 이상의 실행 가능한 팁과 Unity 전문 엔지니어의 베스트 프랙티스를 활용하여 PC 및 콘솔 게임을 최적화(하다)할 수 있습니다.

Unity Success 팀과 Unity Studio Productions 팀이 제작한 이 세부 사례는 최고의 스튜디오와의 실질적인 협업을 바탕으로 제작되었습니다.

전자책 다운로드