참고: 내부 프로파일러는 지원이 중단되어 향후 Unity 버전에서 종료될 예정입니다. 대신 프로파일러 창을 사용합니다(메뉴: Window > Analysis > Profiler). iOS 기기 프로파일링 방법에 대한 자세한 내용은 iOS 기기에서 성능 데이터 수집을 참조하십시오.
Unity에는 iOS용 빌트인 프로파일러가 포함되어 애플리케이션 실행 방식에 대한 인사이트를 제공합니다. 빌트인 프로파일러는 기기에서 실행 중인 애플리케이션에서 콘솔 메시지를 30프레임마다 내보냅니다. 이를 통해 CPU 또는 GPU 바운드 여부를 확인할 수 있습니다. 애플리케이션이 CPU 바운드인 경우 스크립트 코드 또는 가비지 컬렉션이 병목 현상을 일으키는지 확인할 수 있습니다.
다음은 빌트인 프로파일러에서 출력되는 정보의 예제입니다.
iPhone Unity internal profiler stats
frametime> min: 32.5 max: 34.1 avg: 33.3
cpu-player> min: 2.2 max: 4.4 avg: 3.7
batches> min: 3 max: 3 avg: 3
draw calls> min: 3 max: 3 avg: 3
tris> min: 1704 max: 1704 avg: 1704
verts> min: 5088 max: 5088 avg: 5088
dynamic batching> batched draw calls: 0 batches: 0 tris: 0 verts: 0
static batching> batched draw calls: 0 batches: 0 tris: 0 verts: 0
player-detail> physx: 0.0 animation: 0.0 culling 0.0 skinning: 0.0 batching: 0.0 render: 0.0 fixed-update-count: 0 .. 0
scripting-scripts> update: 0.0 fixedUpdate: 0.0 coroutines: 0.0
scripting-memory> information not available on non-development player configuration
모든 시간은 프레임당 밀리초 단위로 측정됩니다. 지난 30프레임의 최소, 최대, 평균 시간을 확인할 수 있습니다.
| 프로퍼티 | 기능 |
|---|---|
| cpu-player | 앱이 Unity 엔진 안에서 코드를 실행하고 CPU에서 스크립트를 실행하는 데 소비하는 시간을 표시합니다. |
| cpu-ogles-drv(Android 전용) | CPU에서 OpenGL ES 드라이버 코드를 실행하는 데 소요된 시간을 표시합니다. 이 드라이버 스탯은 드로우 콜 수, 내부 렌더링 상태 변경 수, 렌더링 파이프라인 설정 및 처리된 버텍스 수를 비롯한 여러 요인의 영향을 받을 수 있습니다. |
| cpu-present(Android 전용) | OpenGL ES의 presentRenderbuffer 커맨드를 실행하는 데 소요된 시간입니다. |
| frametime | 앱 프레임의 전체 시간을 나타냅니다. iOS 하드웨어는 새로고침 속도가 항상 60Hz로 고정되므로, 이 프로퍼티는 항상 16.7ms(1,000ms/60Hz = 16.7ms)의 배수인 시간을 반환합니다. |
| 프로퍼티 | 기능 |
|---|---|
| tris # | 렌더링하기 위해 전송된 총 삼각형 수입니다. |
| verts # | 렌더링하기 위해 전송된 총 버텍스 수입니다. 애플리케이션이 정적 지오메트리만 사용하는 경우 이 숫자를 10000 미만으로 유지합니다. 애플리케이션에서 스킨드 지오메트리의 인스턴스를 많이 사용하는 경우 이 수치는 훨씬 낮아야 합니다. |
| dynamic/static batching | 엔진이 자동으로 배칭한 드로우 콜, 삼각형, 버텍스 수입니다. 이 수치를 드로우 콜 및 삼각형 합계와 비교하면 씬이 배칭에 얼마나 적절하게 준비되었는지 알 수 있습니다. 오브젝트 간에 머티리얼을 최대한 공유하여 배칭을 개선합니다. |
player-detail 섹션에서 엔진 내부 동작에 대한 상세 내역을 확인할 수 있습니다.
| 프로퍼티 | 기능 |
|---|---|
| physx | 물리 연산에 소요된 시간입니다. |
| animation | 뼈대 애니메이션에 소요된 시간입니다. |
| culling | 카메라 절두체 밖에 있는 오브젝트를 컬링하는 데 소요된 시간입니다. |
| skinning | 스킨드 메시에 애니메이션을 적용하는 데 소요된 시간입니다. |
| batching | 지오메트리 배칭에 소요된 시간입니다. 동적 지오메트리 배칭에는 정적 지오메트리 배칭보다 훨씬 더 많은 리소스가 사용됩니다. |
| render | 가시적인 오브젝트를 렌더링하는 데 소요된 시간입니다. |
| fixed-update-count | 이 프레임 동안 실행된 최소 및 최대 FixedUpdate 수입니다. FixedUpdate가 너무 많으면 성능이 크게 저하됩니다. |
scripting-scripts 섹션에서는 Mono 런타임에서 코드를 실행하는 데 소요된 시간에 대한 상세 내역을 확인할 수 있습니다.
| 프로퍼티 | 기능 |
|---|---|
| update | 스크립트의 모든 Update() 메서드를 실행하는 데 소요된 전체 시간입니다. |
| fixedUpdate | 스크립트의 모든 FixedUpdate() 메서드를 실행하는 데 소요된 전체 시간입니다. |
| coroutines | 스크립트 코루틴 안에서 소비한 시간입니다. |
scripting-memory 섹션에서는 Mono 가비지 컬렉터가 메모리를 관리하는 방법에 대한 정보를 확인할 수 있습니다.
| 프로퍼티: | 기능: |
|---|---|
| allocated heap | 할당에 사용할 수 있는 총 메모리 양입니다. 힙에 특정 할당을 위한 메모리가 부족하면 가비지 컬렉션이 트리거됩니다. 그래도 충분한 메모리를 확보하지 못하면 할당된 힙의 크기가 커집니다. |
| used heap | 현재 오브젝트가 사용하는 할당된 힙 의 부분입니다. 구조체가 아닌 새로운 클래스 인스턴스를 생성할 때마다 이 수치가 다음 가비지 컬렉션까지 증가합니다. |
| max number of collections | 지난 30 프레임 동안의 가비지 컬렉션 패스 횟수입니다. |
| collection total duration | 지난 30프레임 동안 발생한 모든 가비지 컬렉션 패스의 총 시간(밀리초 단위)입니다. |
iOS에서는 내부 프로파일러가 기본적으로 비활성화되어 있습니다. 활성화하려면 다음 프로세스 중 하나를 사용하십시오.
Xcode 프로젝트 내부에서 내부 프로파일러를 활성화하려면 다음 단계를 따르십시오.
InternalProfiler.h 파일을 선택합니다.#define ENABLE_INTERNAL_PROFILER 0
다음과 같이 변경합니다.
#define ENABLE_INTERNAL_PROFILER 1
Unity에서 내부 프로파일러를 활성화하려면 다음 단계를 따르십시오.
참고: 애플리케이션을 빌드할 때 Build Settings에서 Development Build 옵션이 활성화되었는지 확인합니다.
출력 콘솔을 표시하려면 Xcode에서 View > Debug Area > Activate Console을 선택한 다음 프로젝트를 실행합니다. Unity는 통계를 30프레임마다 콘솔 창에 출력합니다.