Unity iOS 및 Android에는 프로파일러가 내장되어 있습니다. 빌트인 프로파일러는 기기에서 실행 중인 게임에서 콘솔 메시지를 내보냅니다. 이 메시지는 30 초마다 작성되고 게임 실행 상태에 대한 심층 정보를 제공합니다. 이 메시지의 의미가 쉽게 이해되지 않는 경우도 있지만, 적어도 게임이 CPU 또는 GPU 중 무엇을 더 많이 사용하고 CPU를 더 많이 사용하는 경우 속도 저하 요인이 스크립트 코드인지 Mono 가비지 컬렉션인지 간단하게 판단할 수는 있습니다. 빌트인 프로파일러 설정 방법에 대해서는 이 페이지의 후반부를 참조하십시오.
다음은 빌트인 프로파일러에서 출력되는 정보의 예제입니다.
iPhone/iPad Unity internal profiler stats:
cpu-player> min: 9.8 max: 24.0 avg: 16.3
cpu-ogles-drv> min: 1.8 max: 8.2 avg: 4.3
cpu-waits-gpu> min: 0.8 max: 1.2 avg: 0.9
cpu-present> min: 1.2 max: 3.9 avg: 1.6
frametime> min: 31.9 max: 37.8 avg: 34.1
draw-call #> min: 4 max: 9 avg: 6 | batched: 10
tris #> min: 3590 max: 4561 avg: 3871 | batched: 3572
verts #> min: 1940 max: 2487 avg: 2104 | batched: 1900
player-detail> physx: 1.2 animation: 1.2 culling: 0.5 skinning: 0.0 batching: 0.2 render: 12.0 fixed-update-count: 1 .. 2
mono-scripts> update: 0.5 fixedUpdate: 0.0 coroutines: 0.0
mono-memory> used heap: 233472 allocated heap: 548864 max number of collections: 1 collection total duration: 5.7
모든 시간은 프레임당 밀리초 단위로 측정됩니다. 최근 30 프레임에 걸친 최소, 최대, 평균 시간을 볼 수 있습니다.
프로퍼티: | 기능: |
---|---|
cpu-player | 게임이 Unity 엔진 안에서 코드를 실행하고 CPU에서 스크립트를 실행하는 데 소비하는 시간을 표시합니다. |
cpu-ogles-drv | CPU에서 OpenGL ES 드라이버 코드를 실행하는 데 소요되는 시간을 표시합니다. 드로우 콜 수, 내부 렌더링 상태 변경 수, 렌더링 파이프라인 설정 및 처리된 버텍스 수를 비롯한 여러 요인이 드라이버 통계에 영향을 미칠 수 있습니다. |
cpu-waits-gpu | GPU가 렌더링을 마치기를 기다리는 동안 CPU가 유휴 상태인 시간을 표시합니다. 23ms를 초과하면 애플리케이션이 필레이트/GPU 프로세싱 위주입니다. 값이 너무 작으면 프로필에서 이 값을 표시하지 않고 건너뜁니다. |
msaa-resolve | 안티앨리어싱을 적용하는 데 소요된 시간입니다. |
cpu-present | OpenGL ES의 presentRenderbuffer 커맨드를 실행하는 데 소요된 시간입니다. |
frametime | 게임 프레임의 전체 시간을 나타냅니다. iOS 하드웨어는 주사율이 항상 60Hz로 고정되므로, 항상 16.7ms(1,000ms/60Hz = 16.7ms)의 배수가 표시됩니다. |
프로퍼티: | 기능: |
---|---|
tris # | 렌더링하기 위해 전송된 총 삼각형 수입니다. |
verts # | 렌더링하기 위해 전송된 총 버텍스 수입니다. 정적 지오메트리만 사용하는 경우 숫자를 10,000 이하로 유지해야 하지만, 스킨된 지오메트리가 많은 경우 훨씬 더 낮게 유지해야 합니다. |
batched | 엔진에 의해 자동으로 배칭된 드로우 호출, 삼각형, 버텍스의 수입니다. 이 수를 드로우 호출 및 삼각형 합계와 비교하면 씬이 배칭에 얼마나 잘 준비되어 있는지 대강 알 수 있습니다. 배칭을 개선하려면 오브젝트 간에 최대한 많은 머티리얼을 공유해야 합니다. |
player-detail 섹션에서 엔진 내부 동작에 대한 상세 내역을 확인할 수 있습니다.
프로퍼티: | 기능: |
---|---|
physx | 물리 연산에 소요된 시간입니다. |
animation | 뼈대 애니메이션에 소요된 시간입니다. |
culling | 카메라 절두체 밖에 있는 오브젝트를 컬링하는 데 소요된 시간입니다. |
skinning | 스킨드 메시에 애니메이션을 적용하는 데 소요된 시간입니다. |
batching | 지오메트리 배칭에 소요된 시간입니다. 동적 지오메트리 배칭은 정적 지오메트리 배칭보다 리소스가 훨씬 더 많이 듭니다. |
render | 가시적인 오브젝트를 렌더링하는 데 소요된 시간입니다. |
fixed-update-count | 프레임 중에 실행된 최소 및 최대 FixedUpdate 수입니다. FixedUpdate가 너무 많으면 성능이 크게 저하됩니다. |
mono-scripts 섹션에서는 Mono 런타임에서 코드를 실행하는 데 소요된 시간에 대한 상세 내역을 확인할 수 있습니다.
프로퍼티: | 기능: |
---|---|
update | 스크립트의 모든 Update() 함수를 실행하는 데 소요된 전체 시간입니다. |
fixedUpdate | 스크립트의 모든 FixedUpdate() 함수를 실행하는 데 소요된 전체 시간입니다. |
coroutines | 스크립트 코루틴 안에서 소비한 시간입니다. |
mono-memory 섹션에서는 Mono 가비지 컬렉터가 메모리를 관리하는 방법에 대한 정보를 확인할 수 있습니다.
프로퍼티: | 기능: |
---|---|
allocated heap | 할당할 수 있는 총 메모리 용량입니다. 힙에 남아 있는 메모리가 할당할 용량에 비해 부족할 경우 가비지 컬렉션이 시작됩니다. 컬렉션 후에도 사용 가능한 메모리가 부족하면 할당된 힙의 크기가 커집니다. |
used heap | allocated heap 에서 오브젝트가 현재 사용 중인 비율입니다. 이 수는 다음 가비지 컬렉션까지 새 클래스 인스턴스(구조체 아님)를 만들 때마다 커집니다. |
max number of collections | 지난 30 프레임 동안의 가비지 컬렉션 패스 횟수입니다. |
collection total duration | 지난 30 프레임 동안 발생한 모든 가비지 컬렉션 패스의 총 시간(밀리초 단위)입니다. |
iOS에서는 기본적으로 비활성화되어 있습니다. 활성화하려면 Unity에서 생성된 XCode 프로젝트를 열어 InternalProfiler.h
파일을 선택하고 다음 줄을
#define ENABLE_INTERNAL_PROFILER 0
다음과 같이 변경합니다.
#define ENABLE_INTERNAL_PROFILER 1
XCode 메뉴에서 View > Debug Area > Activate Console 을 선택하여 출력 콘솔(GDB)를 표시한 다음 프로젝트를 실행합니다. Unity는 통계를 콘솔 창에 30프레임마다 출력합니다.
Android에서 활성화하려면 Player 창(Edit > Project Settings 로 이동한 다음 Player 카테고리 선택)에서 Enable Internal Profiler (지원 중단 예정) 체크박스를 클릭합니다. 빌드할 때 Build Settings 에서 Development Build 가 선택되어 있는지 확인합니다. 그러면 기기에서 실행될 때 통계가 로그캣에 표시됩니다. 로그캣을 보려면 adb 또는 Android Debug Bridge가 필요합니다. ADB가 있으면 adb logcat 셸 커맨드를 실행하면 됩니다.
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.