Unity 프로파일러에 액세스하려면 Window > Analysis > Profiler 로 이동하거나 키보드 단축키 Ctrl+7 (macOS의 Command+7)을 사용하십시오.
프로파일러는 애플리케이션 성능의 여러 영역을 기록한 후 해당 정보를 표시합니다. 이 정보를 사용하면 애플리케이션에서 최적화해야 할 사항에 대해 정보에 근거한 결정을 내리고 최적화를 통해 예상한 결과를 달성하는지 확인할 수 있습니다.
기본적으로 프로파일러는 게임의 마지막 300 프레임을 기록하고 보관하며 모든 프레임에 대한 자세한 정보를 표시합니다. 환경 설정 창(메뉴: Edit > Preferences)에서 기록하는 프레임 수를 최대 2,000프레임까지 늘릴 수 있습니다. 참고: 이 설정에서 프레임 수를 많이 늘리면 프로파일러의 오버헤드와 메모리 사용량이 더 많아질 수 있습니다.
스크립트 코드를 검사하고, 애플리케이션이 속도 저하를 유발하는 특정 에셋과 리소스를 사용하는 방식을 확인할 수 있습니다. 또한 여러 기기에서 애플리케이션의 성능을 비교할 수도 있습니다. 프로파일러에 있는 다양한 프로파일러 모듈을 프로파일링 세션에 추가하여 렌더링, 메모리, 오디오 등의 영역에 대한 자세한 정보를 얻을 수 있습니다.
이 페이지는 다음의 항목을 다룹니다.
프로파일러 창은 다음으로 구성됩니다.
환경 설정 창에는 다음과 같은 추가 프로파일러 창 설정이 포함되어 있습니다.
| 환경 설정 | 설명 |
|---|---|
| Frame count | 프로파일러가 캡처할 최대 프레임 수를 설정합니다. 이 숫자는 300에서 2,000 사이에서 설정할 수 있습니다. |
| Show stats for ‘current frame’ | 기본적으로 Current Frame 버튼을 선택하여 Current Frame 모드로 전환하면 프레임 표시기 라인에 현재 프레임에 대한 통계를 보여주는 주석이 표시되지 않습니다. 이는 통계 주석으로 인해 데이터를 실시간으로 보기 어려울 수 있기 때문입니다. 주석을 표시하려면 이 설정을 활성화하십시오. |
| Default recording state | 프로파일러를 열 기록 상태를 선택합니다. Enabled, Disabled 또는 Remember를 선택합니다. Enabled를 선택하면 Record 버튼이 세션 간에 활성 상태로 유지되고, Disabled를 선택하면 비활성화됩니다. 이는 프로파일링 세션 중에 켜고 끄는지와는 관계가 없습니다. Remember 상태는 세션 중에 Record 버튼을 활성화 또는 비활성화했는지 여부를 기억하고, 다음에 프로파일러 창을 열 때 마지막으로 사용한 상태를 유지합니다. |
| Default editor target mode | Attach to Player 드롭다운이 기본적으로 대상으로 할 모드를 선택합니다. Playmode 또는 Editor 중에서 선택합니다. |
프로파일러 컨트롤은 프로파일러 창 상단의 툴바에 있습니다. 이 컨트롤을 사용하여 프로파일러 데이터 기록을 시작하거나 중지하고 프로파일링된 프레임을 탐색하십시오.
| 컨트롤 | 기능 | |
|---|---|---|
| Attach to Player | 애플리케이션을 프로파일링할 대상을 선택할 수 있습니다. 기본적으로 이 모드는 Playmode 로 설정되어 있습니다. Editor 를 선택하여 Unity 에디터를 프로파일링하고 에디터가 현재 사용 중인 리소스를 표시할 수도 있습니다. Unity는 네트워크에서 실행 중이거나 USB를 통해 연결된 모든 기기를 자동으로 감지하여 드롭다운에 표시합니다. 드롭다운에서 Enter IP 를 클릭하여 애플리케이션을 프로파일링할 기기의 IP 주소를 수동으로 입력하십시오. 자세한 내용은 애플리케이션 프로파일링을 참조하십시오. |
|
| Record | 이 설정을 활성화하면 애플리케이션을 실행할 때 활성 모듈에 대한 프로파일링 정보를 기록할 수 있습니다. 이 버튼을 활성화하지 않으면 애플리케이션을 실행할 때 프로파일러가 데이터를 수집하지 않습니다. | |
| Back arrow | 한 프레임이 뒤로 이동합니다. | |
| Forward arrow | 한 프레임이 앞으로 이동합니다. | |
| Current Frame | Current Frame 버튼을 클릭하면 프레임 표시기 라인이 마지막으로 기록된 프레임으로 즉시 이동하고, 프로파일러가Current Frame 모드로 전환됩니다. 프로파일러가 이 모드에서 데이터를 수집하는 동안 현재 프레임에 머무르며 수집한 데이터를 실시간으로 표시합니다. 버튼을 다시 클릭하면 Current Frame 모드가 종료됩니다. | |
| Frame number | 프로파일러에서 현재 보고 있는 프레임 번호입니다. 왼쪽에 있는 숫자는 현재 선택된 프레임이고, 오른쪽에 있는 숫자는 전체 프로파일링 세션 동안 프로파일러가 수집한 총 프레임 수입니다. | |
| Clear | 프로파일러 창의 모든 데이터를 지웁니다. | |
| Clear on Play | 이 설정을 활성화하면 다음 번에 플레이어 창에서 Play를 클릭하거나, 새 타겟 디바이스에 연결할 때 프로파일러 창의 모든 데이터가 지워집니다. | |
| Deep Profile | 이 설정을 활성화하면 모든 C# 메서드를 프로파일링합니다. 이 설정을 활성화하면 Unity는 모든 모노 호출에 계측을 추가하므로 스크립트를 더욱 자세히 조사할 수 있습니다. 세부 프로파일링을 참조하십시오. | |
| Call Stacks | 스크립팅 메모리 할당에 대한 호출 스택을 기록하려면 이 토글을 클릭하십시오. 이 옵션을 활성화할 때 프로파일러가 기록하는 프레임에는 Deep Profile이 활성화되지 않은 경우에도 관리되는 스크립팅 할당을 유발하는 전체 호출 스택의 선택된 샘플 정보가 들어 있습니다. 이 설정이 활성화되면, 기본적으로 프로파일러는 GC.Alloc 샘플에 대한 전체 호출 스택 정보를 기록하지만, 드롭다운 메뉴(UnsafeUtility.Malloc, JobHandle.Complete 또는 Native Allocations)에서 다른 샘플로 변경할 수도 있습니다. 자세한 내용은 CPU 사용 프로파일러 모듈 페이지의 할당 호출 스택 섹션을 참조하십시오. | |
| Load | 저장된 프로파일러 데이터를 프로파일러 창에 로드합니다. Profiler.logFile API를 통해 플레이어가 파일에 작성한 바이너리 프로파일러 데이터도 로드할 수 있습니다. Shift 버튼을 길게 누른 채 Load 버튼을 클릭하면 파일 콘텐츠를 현재 프로파일 프레임에 추가합니다. |
|
| Save | 프로파일러 데이터를 프로젝트 폴더의 .data 파일에 저장합니다. | |
| Context menu | ||
| Color Blind Mode | 이 설정을 활성화하면 프로파일러가 그래프에서 더 높은 콘트라스트 컬러를 사용합니다. 이렇게 하면 적록 색맹(예: 제2색맹, 제1색맹, 제3색맹) 사용자들의 가시성을 향상할 수 있습니다. | |
| Show stats for “current” frame | 기본적으로 Current Frame 버튼을 선택하여 Current Frame 모드로 전환하면 프레임 표시기 라인에 현재 프레임에 대한 통계를 보여주는 주석이 표시되지 않습니다. 이는 통계 주석으로 인해 데이터를 실시간으로 보기 어려울 수 있기 때문입니다. 주석을 표시하려면 이 설정을 활성화하십시오. | |
| Preferences | Preferences 메뉴를 열면 프로파일러별 프로퍼티를 조정할 수 있습니다. | |
낮은 오버헤드를 유지하기 위해 Unity는 에디터 UI의 프레임을 다섯 번째에만 다시 그립니다. 이로 인해 업데이트가 살짝 불안정해집니다.
일반적으로 프로파일러는 ProfilerMarkers에 명시적으로 래핑된 코드 타이밍만 프로파일링합니다. 여기에는 엔진의 네이티브 코드에서 스크립팅 코드로의 호출에 대한 첫 번째 호출 스택 뎁스가 포함됩니다(예: MonoBehaviour’s Start, Update 또는 유사 메서드).
자체 코드에 더욱 명시적인 ProfilerMarker 계측을 추가하지 않고, 스크립팅 코드의 자식 샘플로 볼 수 있는 유일한 다른 샘플은 해당 API가 계측되었을 때 Unity의 API로 다시 호출되는 샘플입니다. 성능 오버헤드를 유발하는 대부분의 API 호출이 계측됩니다. 예를 들어 Camera.main API를 통한 메인 카메라 액세스는 “FindMainCamera” 샘플로 등록됩니다.
Deep Profile 설정을 활성화하면 프로파일러는 스크립트 코드의 모든 부분을 프로파일링하고 모든 함수 호출(Unity API로의 첫 번째 호출 뎁스 포함)을 기록합니다. 이러한 정보는 코드가 애플리케이션 성능에 영향을 미치는 위치를 파악하는 데 도움이 되지만 리소스 소모가 커집니다.
애플리케이션에 대해 세부 프로파일링을 수행하면 Unity는 프로파일러 계측을 모든 스크립트 메서드에 주입하여 모든 함수 호출을 기록합니다. 이는 애플리케이션 코드가 가장 많은 시간을 소비하는 위치를 이해하는 데 도움이 됩니다.
세부 프로파일링은 리소스와 메모리를 많이 사용합니다. 따라서 애플리케이션이 프로파일링되는 동안 매우 느리게 실행됩니다. 세부 프로파일링은 간단한 스크립팅을 사용하는 소규모 게임에 적합합니다. 복잡한 스크립트 코드를 사용하는 경우 애플리케이션에서 세부 프로파일링을 전혀 사용하지 못할 수 있으며, 대형 애플리케이션이 많은 경우에는 세부 프로파일링으로 인해 Unity의 메모리가 부족해질 수 있습니다.
프로파일러로 스트리밍하기 위해 사용하는 링 버퍼에 저장할 샘플이 너무 많아지는 문제가 발생하면 Unity는 오류 메시지를 표시합니다. 링 버퍼의 크기를 늘리려면 프로파일링하는 플레이어의 Profiler.maxUsedMemory 프로퍼티를 조정하십시오.
세부 프로파일링으로 인해 애플리케이션의 프레임 속도가 너무 낮아져 실행이 불가능해지면 스크립트 코드의 블록을 수동으로 프로파일링할 수 있습니다(세부 프로파일링보다 성능 부하가 적음). ProfilerMarkers를 사용하여 스크립트 블록을 마크업하는 데 필요한 계측을 수동으로 추가하십시오. CPU 사용 프로파일러 모듈에서 볼 수 있습니다.
세부 프로파일링을 사용하지 않고 GC.Alloc 샘플을 유발하는 호출 스택을 찾고 싶은 경우 Allocation call stacks 컬렉션을 활성화할 수 있습니다. 프로파일러 컨트롤에서 Call Stacks 설정을 활성화한 후 타임라인 뷰에서 GC.Alloc 샘플을 선택하거나, 계층 구조 뷰에서 Show Related Objects panel 패널을 사용하여 이러한 샘플에 대한 호출 스택을 찾을 수 있습니다. 자세한 내용은 CPU 프로파일러 모듈 페이지에서 할당 호출 스택에 대한 설명을 참조하십시오.
프로파일러 창 상단은 게임의 특정 영역을 프로파일링하는 프로파일러 모듈로 구성됩니다. 애플리케이션을 프로파일링할 때 Unity는 해당 차트에 각 모듈과 관련된 데이터를 표시합니다.
CPU Usage 모듈은 애플리케이션이 각 프레임에 소비하는 시간에 대한 최고의 요약 정보를 제공합니다. 다른 모듈들은 더욱 구체적인 데이터를 수집하며, 특정 영역을 자세히 살펴보거나 애플리케이션의 중요 요소(예: 메모리 사용량, 렌더링, 오디오 통계)를 모니터링하도록 도와줍니다.
각 모듈에는 고유한 차트가 있습니다. 모듈을 선택하면 창의 하단 섹션에 모듈 세부 정보 창이 나타납니다. 이 창에서 모듈이 수집하는 세부 데이터를 확인할 수 있습니다.
| Profiler module | 기능 |
|---|---|
| CPU Usage | 애플리케이션이 가장 많은 시간을 소비하는 위치(예: 물리, 스크립트, 애니메이션, 가비지 컬렉션)에 대한 요약 정보를 제공합니다. 이 모듈에는 애플리케이션에 대한 광범위한 프로파일링 정보가 들어 있으며, 이러한 정보를 사용하면 애플리케이션의 특정 문제를 조사하기 위해 추가로 사용할 모듈을 쉽게 결정할 수 있습니다. 이 모듈은 닫아도 계속 활성 상태를 유지합니다. CPU 사용 프로파일러 모듈을 참조하십시오. |
| GPU Usage | 그래픽스 처리와 관련된 정보를 표시합니다. 이 모듈은 성능 부하가 높아서 기본적으로 활성화되지 않습니다. GPU 사용 프로파일러 모듈을 참조하십시오. |
| Rendering | Unity가 애플리케이션에서 그래픽스를 렌더링하는 방식에 대한 정보를 표시합니다. 여기에는 정적 및 동적 배칭, SetPass 및 드로우 콜, 삼각형, 버텍스 등에 대한 내용이 포함됩니다. 렌더링 프로파일러 모듈을 참조하십시오. |
| Memory | Unity가 애플리케이션에서 메모리를 할당하는 방식에 대한 정보를 표시합니다. 이 정보는 스크립팅 할당(GC.Alloc)이 가비지 컬렉션을 유발하는 방식이나, 애플리케이션의 에셋 메모리 사용량 추세를 확인할 때 특히 도움이 됩니다. 메모리 프로파일러 모듈을 참조하십시오. |
| Audio | 애플리케이션의 오디오 관련 정보(예: 오디오 소스의 재생 위치 및 횟수, 오디오 시스템의 CPU 사용량 요구 사항, Unity가 할당하는 메모리 양)를 표시합니다. 오디오 프로파일러 모듈을 참조하십시오. |
| Video | 애플리케이션에서 비디오와 관련된 정보를 표시합니다. 비디오 프로파일러 모듈을 참조하십시오. |
| Physics | 물리 엔진이 처리한 애플리케이션의 물리에 대한 정보를 표시합니다. 물리 프로파일러 모듈을 참조하십시오. |
| Physics (2D) | 물리 프로파일러 모듈과 유사한 이 모듈은 물리 엔진이 애플리케이션의 2D 물리를 처리한 위치에 대한 정보를 표시합니다. 자세한 내용은 2D 물리 프로파일러 모듈을 참조하십시오. |
| UI | Unity가 애플리케이션의 UI 배칭을 처리한 방식에 대한 정보(예: Unity가 아이템을 배칭하는 이유와 방식)를 표시합니다. UI 및 UI 세부 정보 프로파일러 모듈을 참조하십시오. |
| UI Details | UI 모듈과 유사한 이 모듈의 차트는 배치 및 버텍스 수에 대한 데이터, 그리고 UI 변경을 트리거하는 사용자 입력 이벤트에 대한 정보가 포함된 마커를 추가합니다. UI 및 UI 세부 정보 프로파일러 모듈을 참조하십시오. |
| Global Illumination | Unity가 애플리케이션의 전역 조명 하위 시스템에 소비하는 CPU 리소스 양에 대한 정보를 표시합니다. 전역 조명 프로파일러 창을 참조하십시오. |
| Virtual Texturing | 애플리케이션의 가상 텍스처링 스트리밍에 대한 통계를 표시합니다. 가상 텍스처링 프로파일러 모듈을 참조하십시오. |
| Asset Loading | 애플리케이션이 에셋을 로드하는 방법에 대한 정보를 표시합니다. |