Unity 프로파일러를 사용하여 애플리케이션을 프로파일링하는 경우 다음의 세 가지 방법으로 데이터를 기록할 수 있습니다.
애플리케이션에 대한 정확한 타이밍을 얻는 가장 좋은 방법은 퍼블리시하려는 최종 플랫폼에서 프로파일링하는 것입니다. 이렇게 하면 애플리케이션 성능에 영향을 미치는 정확한 타이밍을 확보할 수 있습니다.
하지만 성능 요소를 개선하려고 할 때마다 애플리케이션을 빌드하는 데는 많은 시간이 소모될 수 있습니다. 따라서 애플리케이션의 성능을 빠르게 평가하기 위해 에디터의 플레이 모드에서 직접 프로파일링할 수 있습니다. 플레이 모드의 프로파일링은 실제 기기에서 애플리케이션의 성능이 어떤지 정확하게 반영하지 못하지만, 최종 플랫폼에서 처음으로 프로파일링한 후 변경 사항이 애플리케이션의 성능을 향상하는지 빠르게 확인하려는 경우 유용한 툴입니다.
Unity 에디터는 플레이 모드에서 실행될 때 애플리케이션과 동일한 리소스를 사용하기 때문에 애플리케이션의 성능에 영향을 미칠 수 있습니다. 따라서 에디터를 별도로 프로파일링하여 사용하는 리소스를 결정할 수도 있습니다. 이 기능은 애플리케이션이 동영상 제작 등과 같이 플레이 모드에서만 작동하도록 설계된 경우에 특히 유용합니다.
타겟 릴리스 플랫폼에서 애플리케이션을 프로파일링하려면 타겟 기기를 네트워크에 연결하거나 케이블로 컴퓨터에 직접 연결하십시오. IP 주소를 통해 기기에 연결할 수도 있습니다. 애플리케이션은 Development Build로만 프로파일링할 수 있습니다. 이렇게 하려면 Build Settings(메뉴: File > Build Settings)로 이동한 후 애플리케이션의 타겟 플랫폼을 선택하고 Development Build 설정을 활성화하십시오. 이 설정을 활성화하면 프로파일러와 관련된 두 개의 설정, Autoconnect Profiler와 Deep Profiling Support를 이용할 수 있습니다.
Autoconnect Profiler 설정을 활성화하면 Unity 에디터는 빌드 프로세스 동안 해당 IP 주소를 빌드된 플레이어로 베이크합니다. 플레이어를 시작하면 베이크된 IP 주소에 있는 에디터의 프로파일러에 연결하려고 시도합니다.
또한 Deep Profiling Support 설정을 활성화하면 Unity는 빌드된 플레이어가 시작할 때 세부 프로파일링을 수행합니다. 즉 프로파일러가 ProfilerMarkers에 명시적으로 래핑된 코드 타이밍뿐만 아니라 코드의 모든 부분을 프로파일링합니다. 이는 애플리케이션의 시작 시간에 대한 세부 프로파일링 정보를 가져올 때 유용하지만, 빌드의 리소스 소모가 약간 더 증가합니다.
프로파일러를 사용하여 애플리케이션을 실행하는 플랫폼에 수동으로 연결하려면 Attach to Player 드롭다운에서 해당 설정을 지정합니다. Autoconnect Profiler가 비활성화된 경우에만 이 작업을 수행할 수 있습니다.
플랫폼이 Attach to Player 드롭다운에 나타나려면 다음 요구 사항을 충족해야 합니다.
Attach to Player 드롭다운에는 Unity가 네트워크를 통해 또는 직접 연결을 통해 감지한 모든 Unity 플레이어가 표시됩니다. Player Name과 플레이어를 실행 중인 Product Name으로 이러한 플레이어를 식별할 수 있습니다(예:“iPhonePlayer (My iPhone)”).
또한 IP 주소를 통해 플레이어에 직접 연결할 수도 있습니다. 이렇게 하려면 Attach to Player 메뉴를 선택한 다음 드롭다운에서 <Enter IP>를 선택합니다. 다이얼로그 상자가 나타나면 연결할 플레이어의 IP 주소와 포트(선택 사항)를 입력합니다.
애플리케이션에 대한 프로파일링 정보를 수집하려면 드롭다운 메뉴에서 플레이어를 선택한 다음 Record를 클릭합니다.
애플리케이션이 실행되는 동안 지속적으로 데이터를 수집하려면 플레이어 설정(메뉴: Edit > Project Settings > Player > Resolution and Presentation)에서 Run In Background 설정을 활성화합니다. 이 설정을 활성화하면 애플리케이션을 백그라운드에서 실행 중인 경우에도 프로파일러가 데이터를 수집합니다. 비활성화하면 프로파일러는 애플리케이션이 활성 창에서 실행될 때만 데이터를 수집합니다.
Attach to Player 드롭다운에는 플레이어에 대한 정보를 찾는 데 사용할 수 있는 검색창이 있습니다. Player Name 또는 기기 카테고리(예: Remote)로 검색할 수 있습니다. 카테고리별로 검색하면 해당 카테고리의 모든 기기가 결과에 표시됩니다.
프로파일러에서 보려면 개발 플레이어의 이름을 선택합니다.
각 열은 언제 사용할 수 있는지에 대한 다음 정보를 제공합니다.
프로퍼티: | 설명: |
---|---|
Player Name | 애플리케이션을 실행하는 기기의 이름입니다. 이 이름을 변경하려면 Edit > Preferences > Analysis > Profiler 로 이동하여 Custom Connection ID 필드에 원하는 이름을 입력합니다. -connection-id 인자를 사용하여 커맨드 라인에서 플레이어를 시작할 때 플레이어 이름 세트를 설정할 수도 있습니다.이 속성의 카테고리에 대한 자세한 내용은 플레이어 이름 기기 카테고리를 참고하십시오. |
Product Name | 이것은 Project > PlayerSettings에서 설정한 필드 값입니다. |
IP | 플레이어의 IP 주소입니다. |
Port | 플레이어의 포트입니다. |
Player Name 카테고리에는 특정 기기 타입에 대한 정보를 표시하는 다음 카테고리가 포함됩니다.
프로퍼티: | 설명: |
---|---|
Play Mode | 플레이 모드에서 애플리케이션을 프로파일링하려면 이 속성을 선택합니다. |
Edit Mode | Unity 에디터에서 프로파일링하려면 이 속성을 선택합니다. |
Local | 이 리스트에는 로컬 컴퓨터, Unity 에디터에서 또는 독립 실행형 플레이어에서 실행 중인 모든 기기가 포함됩니다. 또한 케이블로 호스트 컴퓨터에 물리적으로 연결된 플레이어에 대한 정보도 표시됩니다. |
Remote | 이 섹션은 로컬 네트워크에서 실행되는 기기에 대한 정보를 표시합니다. 이 섹션은 Unity가 로컬 네트워크에서 실행 중인 원격 기기를 찾은 경우에만 나타납니다. |
Connections without ID | This section only appears when Unity finds a device running a player older than Unity 2021.2. These players do not have Product Name, IP, or Port information. |
Direct Connection | 이 옵션을 사용하여 특정 IP 주소와 포트 조합에 연결합니다. 이 카테고리는 가장 최근에 연결한 IP 주소를 표시합니다. |
각 플랫폼은 Unity 프로파일러에 연결할 때 다른 방식으로 작동합니다. 다음 섹션에서는 각 플랫폼의 몇 가지 일반적인 동작에 대한 지침을 제공합니다.
WebGL에서 Unity 프로파일러를 사용할 수 있지만, 에디터를 통해서는 WebGL로 빌드된 실행 중 플레이어에 연결할 수 없습니다. WebGL은 WebSocket을 커뮤니케이션에 사용하므로 브라우저 쪽에서 수신 연결을 허용하지 않기 때문입니다. 실행 중인 플레이어에 연결하려면 Build Settings(메뉴: File > Build Settings)의 Autoconnect Profiler 체크박스를 활성화해야 합니다. Unity는 WebGL에 대한 드로우 콜을 프로파일링할 수 없습니다.
iOS 및 Android 기기 모두 네트워크를 통한 원격 프로파일링을 지원합니다. 방화벽을 사용하는 경우 방화벽의 아웃바운드 규칙에서 54998 - 55511 포트를 여십시오. Unity는 이 포트들을 원격 프로파일링에 사용합니다.
때때로 원격 프로파일링을 설정하면 Unity 에디터가 기기에 자동으로 연결되지 않을 수 있습니다. 이 경우 프로파일러 연결을 수동으로 초기화할 수 있습니다. 이렇게 하려면 프로파일러 창에서 Attach to Player 드롭다운 메뉴를 선택한 후 적절한 기기를 선택하십시오.
또한 네트워크 또는 연결 문제를 피하기 위해 대상 기기를 컴퓨터에 직접 연결할 수도 있습니다.
iOS 기기에서는 원격 프로파일링을 활성화하려면 다음 절차를 따르십시오.
Android 기기는 WiFi 또는 Android 디버그 브리지(adb)를 통한 두 가지 원격 프로파일링 방식을 지원합니다.
WiFi로 프로파일링하려면 다음 절차를 따르십시오.
참고: 기기를 인식할 수 있으려면 Android 기기와 Unity 에디터를 실행하는 호스트 컴퓨터가 모두 동일한 서브넷에 있어야 합니다.
Android 디버그 브리지(adb) 프로파일링의 경우 다음 절차를 따르십시오.
Build & Run을 선택하면 Unity 에디터는 애플리케이션을 위한 adb 터널을 자동으로 생성합니다. 다른 애플리케이션을 프로파일링하거나 adb 서버를 다시 시작하려면 이 터널을 수동으로 설정해야 합니다. 이렇게 하려면 터미널 창 또는 커맨드 프롬프트를 열고 다음을 입력하십시오.
USB 케이블을 통해 에디터-Android 연결이 설정된 경우 필요
`adb forward tcp:34999 localabstract:Unity-{여기에 번들 식별자 삽입}
USB 케이블을 통해 Android-에디터 연결이 설정된 경우 필요
adb reverse tcp:34998 tcp:34999
Android 빌드에서 세부 프로파일링을 사용하려면 Android 플레이어 설정(메뉴: Edit > Project Settings > Player > Android > Other Settings)에서 Mono Scripting Backend 설정을 활성화한 후 다음을 입력하여 adb 커맨드를 통해 게임을 시작해야 합니다.
~$ adb shell am start -n {insert bundle identifier here}/com.unity3d.player.UnityPlayerActivity -e 'unity' '-deepprofiling'
Unity can’t automatically discover ChromeOS devices. To initiate a connection, connect to the device through Android Debug Bridge (adb) by its IP address and then select <Enter IP>
from the Attach to Player drop-down menu and enter the device’s IP address. Once you have connected, you can profile your application as usual.
When you use the Profiler window to run and profile your application in the Editor, the results are only an approximation of your application’s behavior when the target platform runs it. This is because Play mode runs in the same process as the Editor, so you can’t fully isolate your application’s CPU, GPU, and memory usage from the Unity Editor’s usage. This skews the resulting profiling data.
더 나은 프로파일링 결과를 얻으려면 항상 타겟 기기에서 애플리케이션을 프로파일링하고, 기기에서 이미 식별한 문제에 대해 빠르게 반복 작업을 수행하려면 에디터에서만 프로파일링해야 합니다.
또한 플레이 모드에서 프로파일링하거나 에디터를 프로파일링하여 애플리케이션의 성능과 관련이 없는 문제(예: 긴 로드 시간 또는 응답 없는 에디터로 인해 반복 속도가 느려지는지 여부, 또는 애플리케이션이 플레이 모드에서 제대로 동작하지 않는지 여부)를 식별할 수도 있습니다.
Whenever you profile in the Editor, you should make sure that you open Play mode in maximized view, and reduce the amount of open Editor windows. This ensures that other Editor windows don’t use up time on the render thread and GPU, and therefore affect the performance data. When Play mode is in a maximized view it runs your application at a resolution closer to that of your target device, which directly affects performance issues such as those related to fill rate.
프로파일러의 기본 타겟은 플레이 모드이며, 에디터가 플레이 모드에서 실행 중일 때의 활동을 기록합니다. 플레이 모드 프로파일링은 플레이어를 다시 빌드하지 않고 변경 사항을 빠르게 테스트할 때 유용하지만, 애플리케이션의 타겟 플랫폼 및 기기에서 빌드를 확인하기 위한 대체 옵션으로 사용해서는 안 됩니다. 이는 플레이 모드가 에디터와 동일한 애플리케이션과 메인 스레드에서 실행되기 때문입니다. 즉 플레이 모드에서 프로파일링하면 UI, 인스펙터, 씬 뷰 렌더링, 에셋 관리 등과 같은 에디터의 시스템이 애플리케이션의 성능 및 메모리 프로파일링 측정에 영향을 줍니다.
플레이 모드에서 효과적으로 프로파일링하려면 정기적으로 애플리케이션 빌드를 만들어 다양한 타겟 기기(고사양 및 저사양 기기 모두)에 배포하고, 이러한 기기에서 애플리케이션을 테스트 및 프로파일링해야 합니다. 이러한 기기에서 애플리케이션의 성능 문제를 식별하는 경우 가장 주의가 필요한 영역으로 범위를 좁히십시오.
그런 다음 플레이 모드에서 애플리케이션을 프로파일링하고 애플리케이션의 변경 사항에 대한 반복 작업을 빠르게 수행할 수 있습니다. 타겟 기기에서 애플리케이션을 프로파일링하여 얻은 정보를 사용하여 플레이 모드에서 애플리케이션을 프로파일링한 후 유사한 동작이 있는지 확인할 수 있습니다. 그러고 나서 플레이 모드에서 애플리케이션과 프로파일을 다시 변경한 후 변경한 효과를 빠르게 확인할 수 있습니다. 변경 사항에 만족하면 애플리케이션을 빌드하고 타겟 기기에 다시 배포하여 변경 사항을 확인하십시오.
플레이 모드를 실행하는 동안 에디터가 생성하는 프로파일링 데이터의 노이즈와 잘못된 측정을 줄이기 위해 CPU 및 GPU 프로파일러 모듈은 타이밍을 PlayerLoop에서 발생하는 타이밍과 EditorLoop에서 발생하는 타이밍으로 분할합니다. Unity는 PlayerLoop 및 EditorLoop 마커를 사용하여 이러한 타입의 프로파일러 샘플을 할당합니다.
프로파일러가 플레이 모드를 대상으로 하는 경우 PlayerLoop 내부에서 발생한 타이밍 샘플만 수집합니다.
Unity는 CPU 프로파일러 모듈 차트에서 모든 EditorLoop 샘플을 Others로 분류합니다. 그 결과, EditorLoop 샘플은 해당 카테고리에 가장 크게 기여합니다. 이때 에디터가 수행하는 작업을 확인하고 Others 카테고리에 기여하는 상세한 분석 데이터를 얻으려면 프로파일러 타겟을 에디터로 변경하십시오.
Important: If you use Deep Profiling, and target Play mode, it has a performance impact on every function call that happens in both PlayerLoop and EditorLoop. This is because Deep Profiling hooks into the beginning and end of any scripting method call on domain reload and it doesn’t detect which parts are never called from the PlayerLoop. The method calls that happen in the EditorLoop don’t incur the full overhead of creating a sample, but they still check if they should emit one, which causes a smaller but still present overhead.
프로파일러의 타겟을 Editor로 변경하면 이전에 EditorLoop 마커 아래에 숨겨져 있던 모든 샘플이 해당 카테고리에 기여합니다. 즉 CPU 프로파일러 모듈의 세부 정보 창과 해당 차트에 있는 정보가 크게 변경됩니다.
에디터의 시작 시간을 프로파일링하려면 -profiler-enable
커맨드 라인 옵션을 사용하여 에디터를 시작하십시오.
프로파일러 창이 에디터 성능에 미치는 영향을 줄이려면 자체 프로세스에서 프로파일러 창을 여는 스탠드얼론 프로파일러를 사용하십시오. 이는 에디터를 프로파일링 타겟으로 선택하거나 애플리케이션에 대해 세부 프로파일링을 수행하는 경우 특히 유용합니다. 프로파일러 창 자체가 일반적으로 성능 데이터를 왜곡할 수 있는 리소스를 사용하기 때문입니다.
애플리케이션을 프로파일링하는 경우 여러 프로파일링 세션에서 일관성을 보장하고 Unity가 사용하는 프로세스가 프로파일링 데이터에 영향을 미치지 않도록 하기 위해 다음과 같은 몇 가지 작업을 수행할 수 있습니다.