Unity 프로파일러에 액세스하려면 Window > Analysis > Profiler 로 이동하거나 키보드 단축키 Ctrl+7 (macOS의 Command+7)을 사용하십시오.
프로파일러는 애플리케이션 성능의 여러 영역을 기록한 후 해당 정보를 표시합니다. 이 정보를 사용하면 애플리케이션에서 최적화해야 할 사항에 대해 정보에 근거한 결정을 내리고 최적화를 통해 예상한 결과를 달성하는지 확인할 수 있습니다.
프로파일러는 게임의 마지막 300프레임을 기록하고 유지하며, 모든 프레임에 대한 자세한 정보를 표시합니다. 스크립트 코드를 검사하고, 애플리케이션이 속도 저하를 유발하는 특정 에셋과 리소스를 사용하는 방식을 확인할 수 있습니다. 또한 여러 기기에서 애플리케이션의 성능을 비교할 수도 있습니다.
프로파일러에 있는 다양한 프로파일러 모듈을 프로파일링 세션에 추가하여 렌더링, 메모리, 오디오 등의 영역에 대한 자세한 정보를 얻을 수 있습니다.
이 페이지는 다음의 항목을 다룹니다.
프로파일러 창은 다음으로 구성됩니다.
프로파일러 컨트롤은 프로파일러 창 상단의 툴바에 있습니다. 이 컨트롤을 사용하여 프로파일러 데이터 기록을 시작하거나 중지하고 프로파일링된 프레임을 탐색하십시오.
컨트롤 | 기능 | |
---|---|---|
Record | 이 설정을 활성화하면 애플리케이션을 실행할 때 활성 모듈에 대한 프로파일링 정보를 기록할 수 있습니다. 이 버튼을 활성화하지 않으면 애플리케이션을 실행할 때 프로파일러가 데이터를 수집하지 않습니다. | |
Deep Profile | 이 설정을 활성화하면 모든 C# 메서드를 프로파일링합니다. 이 설정을 활성화하면 Unity는 모든 모노 호출에 계측을 추가하므로 스크립트를 더욱 자세히 조사할 수 있습니다. 세부 프로파일링을 참조하십시오. | |
Profile Editor | 이 설정을 활성화하면 Unity 에디터를 프로파일링할 수 있습니다. 이때 에디터가 현재 사용하는 리소스가 표시됩니다. 버튼을 다시 클릭하면 에디터 프로파일링을 중지합니다. | |
Attach to Player | 애플리케이션을 프로파일링할 타겟을 선택합니다. 기본 설정은 Editor(Unity 에디터를 의미함)입니다. 또한 Unity는 네트워크에서 실행 중이거나 USB를 통해 연결된 기기를 자동으로 감지한 후 드롭다운에 표시합니다. 애플리케이션을 프로파일링할 기기의 IP 주소를 수동으로 입력하려면 드롭다운에서 Enter IP 를 클릭하십시오. 자세한 내용은 애플리케이션 프로파일링을 참조하십시오. | |
Allocation Callstacks | 스크립팅 메모리 할당에 대한 호출 스택을 기록하려면 이 드롭다운을 클릭하여 Managed Allocations 를 선택합니다. 이 옵션을 활성화할 때 프로파일러가 기록하는 프레임에는 Deep Profile 이 활성화되지 않은 경우에도 관리되는 스크립팅 할당을 유발하는 전체 호출 스택의 GC.Alloc 샘플 정보가 들어 있습니다. 자세한 내용은 CPU 사용 프로파일러 모듈 페이지의 할당 호출 스택 섹션을 참조하십시오. | |
Clear on Play | 이 설정을 활성화하면 다음 번에 플레이어 창에서 Play를 클릭하거나, 새 타겟 디바이스에 연결할 때 프로파일러 창의 모든 데이터가 지워집니다. | |
Clear | 프로파일러 창의 모든 데이터를 지웁니다. | |
Load | 저장된 프로파일러 데이터를 프로파일러 창에 로드합니다. Profiler.logFile API를 통해 플레이어가 파일에 작성한 바이너리 프로파일러 데이터도 로드할 수 있습니다. Shift 버튼을 길게 누른 채 Load 버튼을 클릭하면 파일 콘텐츠를 현재 프로파일 프레임에 추가합니다. |
|
Save | 프로파일러 데이터를 프로젝트 폴더의 .data 파일에 저장합니다. | |
Transport controls | 이 컨트롤을 사용하여 프로파일러 차트에서 이동할 수 있습니다. 플레이 모드에서 프로파일링 중이고 애플리케이션이 실행되는 동안 이 전송 컨트롤을 클릭하면 애플리케이션이 일시정지됩니다. | |
Frame number | 프로파일러에서 현재 보고 있는 프레임 번호입니다. | |
Back arrow | 한 프레임이 뒤로 이동합니다. | |
Forward arrow | 한 프레임이 앞으로 이동합니다. | |
Current | 마지막으로 기록한 프레임으로 이동하여 실시간으로 수집한 프로파일러 데이터를 표시합니다. |
낮은 오버헤드를 유지하기 위해 Unity는 에디터 UI의 프레임을 다섯 번째에만 다시 그립니다. 이로 인해 업데이트가 살짝 불안정해집니다.
일반적으로 프로파일러는 ProfilerMarkers에 명시적으로 래핑된 코드 타이밍만 프로파일링합니다. 여기에는 엔진의 네이티브 코드에서 스크립팅 코드로의 호출에 대한 첫 번째 호출 스택 뎁스가 포함됩니다(예: MonoBehaviour
’s Start
, Update
또는 유사 메서드).
자체 코드에 더욱 명시적인 ProfilerMarker
계측을 추가하지 않고, 스크립팅 코드의 자식 샘플로 볼 수 있는 유일한 다른 샘플은 해당 API가 계측되었을 때 Unity의 API로 다시 호출되는 샘플입니다. 성능 오버헤드를 유발하는 대부분의 API 호출이 계측됩니다. 예를 들어 Camera.main
API를 통한 메인 카메라 액세스는 “FindMainCamera
” 샘플로 등록됩니다.
Deep Profile 설정을 활성화하면 프로파일러는 스크립트 코드의 모든 부분을 프로파일링하고 모든 함수 호출(Unity API로의 첫 번째 호출 뎁스 포함)을 기록합니다. 이러한 정보는 코드가 애플리케이션 성능에 영향을 미치는 위치를 파악하는 데 도움이 되지만 리소스 소모가 커집니다.
애플리케이션에 대해 세부 프로파일링을 수행하면 Unity는 프로파일러 계측을 모든 스크립트 메서드에 주입하여 모든 함수 호출을 기록합니다. 이는 애플리케이션 코드가 가장 많은 시간을 소비하는 위치를 이해하는 데 도움이 됩니다. 세부 프로파일링을 사용하려면 어셈블리를 다시 로드해야 하기 때문에 -deepprofiling
커맨드 라인 인자를 사용하여 플레이어를 시작해야 합니다.
세부 프로파일링은 리소스와 메모리를 많이 사용합니다. 따라서 애플리케이션이 프로파일링되는 동안 매우 느리게 실행됩니다. 세부 프로파일링은 간단한 스크립팅을 사용하는 소규모 게임에 적합합니다. 복잡한 스크립트 코드를 사용하는 경우 애플리케이션에서 세부 프로파일링을 전혀 사용하지 못할 수 있으며, 대형 애플리케이션이 많은 경우에는 세부 프로파일링으로 인해 Unity의 메모리가 부족해질 수 있습니다.
프로파일러로 스트리밍하기 위해 사용하는 링 버퍼에 저장할 샘플이 너무 많아지는 문제가 발생하면 Unity는 오류 메시지를 표시합니다. 링 버퍼의 크기를 늘리려면 프로파일링하는 플레이어의 Profiler.maxUsedMemory 프로퍼티를 조정하십시오.
세부 프로파일링으로 인해 애플리케이션의 프레임 속도가 너무 낮아져 실행이 불가능해지면 스크립트 코드의 블록을 수동으로 프로파일링할 수 있습니다(세부 프로파일링보다 성능 부하가 적음). ProfilerMarkers를 사용하여 스크립트 블록을 마크업하는 데 필요한 계측을 수동으로 추가하십시오. CPU 사용 프로파일러 모듈에서 볼 수 있습니다.
세부 프로파일링을 사용하지 않고 GC.Alloc 샘플을 유발하는 호출 스택을 찾고 싶은 경우 Allocation Callstacks 컬렉션을 활성화할 수 있습니다. Managed Allocations 설정을 활성화하면 타임라인 뷰에서 GC.Alloc 샘플을 선택하거나, 계층 구조 뷰에서 Show Related Objects panel 을 사용하여 이러한 샘플에 대한 호출 스택을 찾을 수 있습니다. 자세한 내용은 CPU 프로파일러 모듈 페이지에서 할당 호출 스택에 대한 설명을 참조하십시오.
Color Blind Mode 를 활성화하면 프로파일러가 그래프에 고대비 컬러를 사용합니다. 이렇게 하면 적록 색맹(예: 제2색맹, 제1색맹, 제3색맹) 사용자들의 가시성을 향상할 수 있습니다. 이 모드를 활성화하려면 프로파일러 창의 오른쪽 상단 모서리에 있는 컨텍스트 메뉴로 이동한 후 Color Blind Mode 를 선택하십시오.
프로파일러 창 상단은 게임의 특정 영역을 프로파일링하는 프로파일러 모듈로 구성됩니다. 애플리케이션을 프로파일링할 때 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 물리를 처리한 위치에 대한 정보를 표시합니다. |
Network Messages (지원 중단 예정) |
멀티플레이어 고수준 API가 송수신하는 저수준 패킷 및 메시지에 관한 정보를 표시합니다. 참고: 멀티플레이어 고수준 API는 지원이 중단되었습니다. |
Network Operations (지원 중단 예정) | 멀티플레이어 고수준 API가 송수신하는 메시지에 어떤 타입이나 작업이 있는지에 대한 세분화된 정보(예: SyncVars 또는 Commands가 전송된 횟수)를 표시합니다. 참고: 멀티플레이어 고수준 API는 지원이 중단되었습니다. |
UI | Unity가 애플리케이션의 UI 배칭을 처리한 방식에 대한 정보(예: Unity가 아이템을 배칭하는 이유와 방식)를 표시합니다. UI 프로파일러 모듈을 참조하십시오. |
UI Details | UI 모듈과 유사한 이 모듈의 차트는 배치 및 버텍스 수에 대한 데이터, 그리고 UI 변경을 트리거하는 사용자 입력 이벤트에 대한 정보가 포함된 마커를 추가합니다. |
Global Illumination | Unity가 애플리케이션의 전역 조명 하위 시스템에 소비하는 CPU 리소스 양에 대한 정보를 표시합니다. 전역 조명 프로파일러 창을 참조하십시오. |
GPU, UI 및 오디오 프로파일러 모듈을 비롯한 일부 프로파일러 모듈은 데이터 수집 부하가 큽니다. 이러한 모듈이 애플리케이션의 성능에 영향을 미치지 않도록 하려면 모듈의 우측 상단 코너의 종료 버튼(x)을 클릭하여 비활성화합니다. 그러면 창에서 모듈이 제거되고, 프로파일러가 해당 모듈의 데이터 수집을 중지하며, 프로파일러의 성능 부하가 감소합니다.
이는 CPU 사용 모듈에는 적용되지 않습니다. 이 모듈은 다른 모듈들이 사용하기 때문에 비활성화되어도 데이터 수집을 멈추지 않습니다.
모듈을 추가하려면 Add Profiler 드롭다운을 선택하고 활성화할 프로파일러를 선택하십시오. 드롭다운에서 프로파일러 모듈을 선택하면 데이터 수집을 시작하지만, 활성 상태가 아닌 기간에 대한 데이터는 보여주지 않습니다.
GPU 프로파일러 모듈은 성능 부하를 피하기 위해 기본적으로 활성화되지 않습니다. 그래픽 드라이버에 연결하려면 애플리케이션 시작 시 GPU 프로파일러 모듈이 활성화되어 있어야 합니다. 이 모듈을 나중에 추가하면 대부분의 플랫폼에서 아무 효과가 없으며, 프로파일러는 “GPU 프로파일링이 그래픽 카드 드라이버에서 지원되지 않습니다(또는 드라이버 버그로 비활성화되었습니다).”라는 메시지를 표시합니다.
프로파일러가 프로파일러 창이 아니라 Profiler.logFile API를 통해 데이터를 수집하고 디스크로 전송하도록 명령하려는 경우 Profiler.SetAreaEnabled()를 통해 프로파일러 모듈을 비활성화할 수 있습니다.
외부 IDE를 통해 스크립트를 디버깅하는 일부 설정도 성능 부하를 유발할 수 있습니다. 이러한 성능 부하를 피하고 더욱 정확한 측정치를 얻으려면 Editor Attaching 설정(메뉴: Preferences > External Tools)을 비활성화하십시오. 마찬가지로, 빌드 플레이어를 프로파일링할 때에는 Build Settings 를 열고 Script Debugging 을 비활성화하면 성능 부하를 피할 수 있습니다.
프로파일러 창의 상단에는 시간 경과에 따른 성능 데이터가 프레임별로 표시됩니다. 애플리케이션을 실행하면 프로파일러는 각 프레임에 대한 데이터를 기록합니다. 기본적으로 프로파일러 창에는 프로파일링되는 마지막 300프레임의 이력이 표시됩니다. 프로파일러 창의 프로파일러 프레임 차트 영역을 클릭하면 흰색 줄이 나타나 애플리케이션의 한 개 프레임을 강조 표시합니다. 프레임 간에 이동하려면 프로파일러 창의 툴바에 있는 이동 컨트롤을 사용합니다.
Unity는 차트의 수직 스케일을 자동으로 관리하고, 차트는 창의 수직 공간을 채우려고 시도합니다. 차트에서 더욱 자세한 내용을 보기 위해 다른 프로파일러 모듈을 제거하거나, 차트와 상세 통계 영역 사이의 분할선을 드래그하여 차트의 화면 영역을 늘릴 수 있습니다.
차트에서 지표 숨김 및 표시를 토글하려면 모듈의 레이블 옆에 있는 컬러 사각형을 클릭하십시오. 그러면 스파이크의 원인을 쉽게 식별할 수 있습니다. CPU 사용 프로파일러의 차트와 같은 누적형 차트에서 지표 레이블의 순서를 변경하여 누적 순서에 영향을 줄 수 있습니다. 이렇게 하면 복잡한 지표의 가독성을 높여 차트를 더욱 쉽게 살펴볼 수 있습니다.
각 프로파일러 모듈은 다른 성능 데이터 지표를 수집하여 별도 차트로 표시합니다. 프레임을 클릭하면 Unity는 프로파일러 창 하단의 모듈 세부 정보 창에 해당 프레임에 대한 상세 정보를 표시합니다. 이러한 창에 표시되는 세부 정보 타입은 선택한 프로파일러 모듈에 따라 다릅니다. 각 모듈이 이 영역에 표시하는 세부 정보에 대한 자세한 내용은 프로파일러 모듈의 개별 문서를 참조하십시오.
커맨드 라인(예: Windows의 명령 프롬프트, macOS의 터미널, Linux 셸, Android용 adb)을 통해 빌드된 플레이어 또는 Unity 에디터를 시작하는 경우 커맨드 라인 인자를 전달하여 일부 프로파일러 설정을 지정할 수 있습니다.
커맨드 라인 인자 | 설명 |
---|---|
-deepprofiling |
빌드된 플레이어에서 세부 프로파일링을 활성화합니다. 이는 Mono 스크립팅 백엔드에 대해 빌드된 플레이어에서만 동작합니다. |
-profileStartup |
플레이어 또는 에디터의 시작을 프로파일링합니다. 이 인자를 플레이어에서 사용하면 빌드 설정의 Autoconnect Profiler 옵션을 활성화한 상태로 플레이어를 빌드하는 것과 동일한 효과를 얻을 수 있습니다. 이 인자를 에디터에서 사용하면 에디터 시작 시 프로파일러 정보를 수집하여 프로파일러 창에 표시합니다. |
-profiler-maxusedmemory |
기본적으로 maxUsedMemory 는 플레이어의 경우 16MB, 에디터의 경우 256MB입니다. 이 인자를 사용하여 시작 시 maxUsedMemory 파라미터를 커스텀 크기로 설정할 수 있습니다(예: -profiler-maxusedmemory 16777216 ). 크기는 바이트로 설정됩니다. |