Version: 2023.2
언어: 한국어
프로파일러 개요
일반 프로파일러 마커

애플리케이션 프로파일링

Unity 프로파일러를 사용하여 애플리케이션을 프로파일링하는 경우 다음의 세 가지 방법으로 데이터를 기록할 수 있습니다.

  • 타겟 플랫폼의 플레이어에서 애플리케이션을 프로파일링합니다.
  • Unity 에디터의 플레이 모드에서 애플리케이션을 프로파일링합니다.
  • Unity 에디터를 프로파일링합니다.

애플리케이션에 대한 정확한 타이밍을 얻는 가장 좋은 방법은 퍼블리시하려는 최종 플랫폼에서 프로파일링하는 것입니다. 이렇게 하면 애플리케이션 성능에 영향을 미치는 정확한 타이밍을 확보할 수 있습니다.

하지만 성능 요소를 개선하려고 할 때마다 애플리케이션을 빌드하는 데는 많은 시간이 소모될 수 있습니다. 따라서 애플리케이션의 성능을 빠르게 평가하기 위해 에디터의 플레이 모드에서 직접 프로파일링할 수 있습니다. 플레이 모드의 프로파일링은 실제 기기에서 애플리케이션의 성능이 어떤지 정확하게 반영하지 못하지만, 최종 플랫폼에서 처음으로 프로파일링한 후 변경 사항이 애플리케이션의 성능을 향상하는지 빠르게 확인하려는 경우 유용한 툴입니다.

Unity 에디터는 플레이 모드에서 실행될 때 애플리케이션과 동일한 리소스를 사용하기 때문에 애플리케이션의 성능에 영향을 미칠 수 있습니다. 따라서 에디터를 별도로 프로파일링하여 사용하는 리소스를 결정할 수도 있습니다. 이 기능은 애플리케이션이 동영상 제작 등과 같이 플레이 모드에서만 작동하도록 설계된 경우에 특히 유용합니다.

타겟 플랫폼에서 애플리케이션 프로파일링

타겟 릴리스 플랫폼에서 애플리케이션을 프로파일링하려면 타겟 기기를 네트워크에 연결하거나 케이블로 컴퓨터에 직접 연결하십시오. IP 주소를 통해 기기에 연결할 수도 있습니다. 애플리케이션은 Development Build로만 프로파일링할 수 있습니다. 이렇게 하려면 Build Settings(메뉴: File > Build Settings)로 이동한 후 애플리케이션의 타겟 플랫폼을 선택하고 Development Build 설정을 활성화하십시오. 이 설정을 활성화하면 프로파일러와 관련된 두 개의 설정, Autoconnect ProfilerDeep Profiling Support를 이용할 수 있습니다.

프로파일링 옵션이 활성화된 빌드 설정 창
프로파일링 옵션이 활성화된 빌드 설정 창

Autoconnect Profiler 설정을 활성화하면 Unity 에디터는 빌드 프로세스 동안 해당 IP 주소를 빌드된 플레이어로 베이크합니다. 플레이어를 시작하면 베이크된 IP 주소에 있는 에디터의 프로파일러에 연결하려고 시도합니다.

또한 Deep Profiling Support 설정을 활성화하면 Unity는 빌드된 플레이어가 시작할 때 세부 프로파일링을 수행합니다. 즉 프로파일러가 ProfilerMarkers에 명시적으로 래핑된 코드 타이밍뿐만 아니라 코드의 모든 부분을 프로파일링합니다. 이는 애플리케이션의 시작 시간에 대한 세부 프로파일링 정보를 가져올 때 유용하지만, 빌드의 리소스 소모가 약간 더 증가합니다.

프로파일러 창의 플레이어에 연결

프로파일러를 사용하여 애플리케이션을 실행하는 플랫폼에 수동으로 연결하려면 Attach to Player 드롭다운에서 설정합니다. Autoconnect Profiler가 비활성화된 경우에만 이렇게 할 수 있습니다.

플랫폼에 Attach to Player 드롭다운이 표시되도록 하려면 다음 요구 사항을 충족해야 합니다.

  • 플랫폼은 로컬 네트워크에서 볼 수 있거나 로컬 컴퓨터에 케이블로 직접 연결되어 있어야 합니다.
  • Development Build 옵션이 활성화된 상태로 빌드한 플레이어가 플랫폼에서 실행되고 있어야 합니다. 플랫폼에 대해 이 설정을 활성화하는 방법에 대한 지침은 타겟 플랫폼에서 애플리케이션 프로파일링을 참조하십시오.
  • 플랫폼에서 플레이어를 실행하고 있어야 합니다.

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 검색창 사용

Attach to Player 드롭다운에는 플레이어에 대한 정보를 찾는 데 사용할 수 있는 검색창이 있습니다. Player Name 또는 기기 카테고리(예: Remote)로 검색할 수 있습니다. 카테고리로 검색하면 해당 카테고리에 해당하는 모든 기기가 결과에 표시됩니다.

프로파일러에서 보려면 개발 플레이어의 이름을 선택합니다.

Attach to Player 속성

각 열은 언제 사용할 수 있는지에 대한 다음 정보를 제공합니다.

프로퍼티: 설명:
Player Name 애플리케이션을 실행하는 기기의 이름입니다.

이 이름을 변경하려면 Edit > Preferences > Analysis > Profiler (macOS: Unity > Settings > Analysis > Profiler)로 이동하여 Custom Connection ID 필드에 원하는 이름을 입력합니다.

-connection-id 인자를 사용하여 커맨드 라인에서 플레이어를 시작할 때 Player Name 세트를 설정할 수도 있습니다.

이 속성의 카테고리에 대한 자세한 내용은 플레이어 이름 기기 카테고리를 참조하십시오.
Product Name 이것은 Project > PlayerSettings에서 설정한 필드 값입니다.
IP 플레이어의 IP 주소입니다.
Port 플레이어의 포트입니다.

플레이어 이름 기기 카테고리

Player Name 카테고리에는 특정 기기 타입에 대한 정보를 표시하는 다음 카테고리가 포함됩니다.

프로퍼티: 설명:
Play Mode 플레이 모드에서 애플리케이션을 프로파일링하려면 이 속성을 선택합니다.
Edit Mode Unity 에디터에서 프로파일링하려면 이 속성을 선택합니다.
Local 이 리스트에는 로컬 컴퓨터, Unity 에디터에서 또는 독립 실행형 플레이어에서 실행 중인 모든 기기가 포함됩니다.

또한 케이블로 호스트 컴퓨터에 물리적으로 연결된 플레이어에 대한 정보도 표시됩니다.
Remote 이 섹션은 로컬 네트워크에서 실행되는 기기에 대한 정보를 표시합니다.

이 섹션은 Unity가 로컬 네트워크에서 실행 중인 원격 기기를 찾은 경우에만 나타납니다.
Connections without ID 이 섹션은 Unity에서 Unity 2021.2 이전 버전의 플레이어를 실행하는 기기를 발견한 경우에만 표시됩니다.
이러한 플레이어는 Product Name, IP 또는 Port 정보가 없습니다.
Direct Connection 이 옵션을 사용하여 특정 IP 주소와 포트 조합에 연결합니다. 이 카테고리는 가장 최근에 연결한 IP 주소를 표시합니다.

플랫폼별 프로파일링 지침

각 플랫폼은 Unity 프로파일러에 연결할 때 다른 방식으로 작동합니다. 다음 섹션에서는 각 플랫폼의 몇 가지 일반적인 동작에 대한 지침을 제공합니다.

웹 플랫폼에서 Unity 프로파일러를 사용할 수 있지만, 에디터를 통해 웹으로 빌드된 실행 중인 플레이어에 연결할 수는 없습니다. 이는 WebGL API가 커뮤니케이션에 WebSocket을 사용하므로 브라우저 측에서 수신하는 연결을 허용하지 않기 때문입니다. 실행 중인 플레이어에 연결하려면 Build Settings(메뉴: File > Build Settings)의Autoconnect Profiler 체크박스를 활성화해야 합니다. Unity는 웹 애플리케이션에 대해 드로우 콜을 프로파일링할 수 없습니다.

모바일 기기에서 프로파일링

iOS 및 Android 기기 모두 네트워크를 통한 원격 프로파일링을 지원합니다. 방화벽을 사용하는 경우 방화벽의 아웃바운드 규칙에서 54998 - 55511 포트를 여십시오. Unity는 이 포트들을 원격 프로파일링에 사용합니다.

원격 프로파일링을 설정하면 Unity 에디터가 기기에 자동으로 연결되지 않는 경우가 있습니다. 이러한 경우 Profiler 창에서 Attach to Player 드롭다운 메뉴를 선택하고 적절한 기기를 선택하여 수동으로 프로파일러 연결을 시작할 수 있습니다.

또한 네트워크 또는 연결 문제를 피하기 위해 대상 기기를 컴퓨터에 직접 연결할 수도 있습니다.

iOS 원격 프로파일링

iOS 기기에서는 원격 프로파일링을 활성화하려면 다음 절차를 따르십시오.

  1. iOS 기기를 WiFi 네트워크에 연결합니다. 프로파일러는 로컬 WiFi 네트워크를 사용해 프로파일링 데이터를 기기에서 Unity 에디터로 전송합니다.
  2. 케이블을 통해 기기를 컴퓨터에 연결합니다. Build Settings 창(메뉴: File > Build Settings)에서 Development BuildAutoconnect Profiler 체크박스를 선택한 다음, Build & Run을 클릭합니다.
  3. 기기에서 애플리케이션이 실행되면 Unity 에디터의 Profiler 창(메뉴: Window > Analysis > Profiler)을 엽니다.

Android 원격 프로파일링

Android 기기는 두 가지 방법의 원격 프로파일링을 지원합니다. WiFi 및 Android 디버그 브리지(adb).

WiFi로 프로파일링하려면 다음 절차를 따르십시오.

  1. Android 기기에서 모바일 데이터를 비활성화합니다.
  2. Android 기기를 WiFi 네트워크에 연결합니다. 프로파일러는 로컬 WiFi 네트워크를 사용해 프로파일링 데이터를 기기에서 Unity 에디터로 전송합니다.
  3. 케이블을 통해 기기를 컴퓨터에 연결합니다. Build Settings 창(메뉴: File > Build Settings)에서 Development BuildAutoconnect Profiler 체크박스를 선택한 다음, Build & Run을 클릭합니다.
  4. 기기에서 애플리케이션이 실행되면 Unity 에디터의 Profiler 창(메뉴: Window > Analysis > Profiler)을 엽니다.

참고: 기기를 인식할 수 있으려면 Android 기기와 Unity 에디터를 실행하는 호스트 컴퓨터가 모두 동일한 서브넷에 있어야 합니다.

Android 디버그 브리지(adb) 프로파일링의 경우 다음 절차를 따르십시오.

  1. 기기가 Development mode에 있는지 확인하고 USB debugging 설정을 활성화합니다.
  2. 케이블을 사용하여 기기를 컴퓨터에 연결하고 adb 기기 리스트에 표시되는지 확인합니다.
  3. Build Settings 창(메뉴: File > Build Settings)에서 Development Build 체크박스를 선택한 다음, Build & Run을 클릭합니다.
  4. 애플리케이션이 기기에서 실행되면 Unity 에디터에서 프로파일러 창(메뉴: Window > Analysis > Profiler)을 엽니다.
  5. Attach to Player 드롭다운 메뉴에서 AndroidProfiler(ADB@127.0.0.1:34999)를 선택합니다. 드롭다운 메뉴의 항목은 Android를 타겟으로 선택한 경우에만 표시됩니다.

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'

ChromeOS 원격 프로파일링

WiFi 및 USB 연결을 통한 adb를 통해 원격 프로파일링을 지원하는 Android 기기와 달리, ChromeOS 기기는 WiFi를 통한 adb를 통해 원격 프로파일링을 지원합니다.

ChromeOS 기기에서 WiFi 프로파일링을 활성화하려면 다음 단계를 따르십시오.

  1. Chromebook의 Linux Development EnvironmentADB debugging 설정을 활성화합니다. ChromeOS 개발자 모드를 활성화하지 않아도 됩니다. 이렇게 하는 방법에 대한 자세한 내용은 ADB 디버그 활성화를 참조하십시오.
  2. Chromebook과 Unity 에디터를 실행하는 호스트 컴퓨터를 동일한 WiFi 네트워크에 연결합니다.
  3. adb를 통해 Chromebook과 호스트 컴퓨터 간의 연결을 설정합니다. 이렇게 하는 방법에 대한 자세한 내용은 네트워크를 통해 ADB에 연결을 참조하십시오.
  4. Build Settings 창(메뉴: File > Build Settings)에서 Development BuildAutoconnect Profiler 체크박스를 선택한 다음, Build & Run을 클릭합니다.
  5. 기기에서 애플리케이션이 실행되면 Unity 에디터의 Profiler 창(메뉴: Window > Analysis > Profiler)을 엽니다.
    참고: 애플리케이션이 Chromebook에 배포되지 않은 경우, Build SettingsRun Device 드롭다운을 확인합니다. 기기가 목록에 없지만 호스트 컴퓨터와 Chromebook 간의 adb 연결이 설정되어 있는 경우 Run Device 드롭다운의 <Enter IP> 옵션을 통해 기기의 IP 주소를 입력합니다. IP 주소를 입력한 후에는 애플리케이션을 평소처럼 프로파일링할 수 있습니다.

Unity 에디터에서 프로파일링

프로파일러 창을 사용하여 에디터에서 애플리케이션을 실행하고 프로파일링하는 경우 타겟 플랫폼이 애플리케이션을 실행할 때의 대략적인 애플리케이션 동작을 결과로 보여줍니다. 플레이 모드는 에디터와 동일한 프로세스로 실행되므로 애플리케이션의 CPU, GPU 및 메모리 사용량 데이터를 Unity 에디터의 사용량 데이터와 완벽하게 분리할 수 없습니다. 이로 인해 결과 프로파일링 데이터가 왜곡됩니다.

더 나은 프로파일링 결과를 얻으려면 항상 타겟 기기에서 애플리케이션을 프로파일링하고, 기기에서 이미 식별한 문제에 대해 빠르게 반복 작업을 수행하려면 에디터에서만 프로파일링해야 합니다.

또한 플레이 모드에서 프로파일링하거나 에디터를 프로파일링하여 애플리케이션의 성능과 관련이 없는 문제(예: 긴 로드 시간 또는 응답 없는 에디터로 인해 반복 속도가 느려지는지 여부, 또는 애플리케이션이 플레이 모드에서 제대로 동작하지 않는지 여부)를 식별할 수도 있습니다.

에디터에서 프로파일링할 때마다 최대화된 뷰에서 플레이 모드를 열고 열려 있는 에디터 창의 개수를 줄여야 합니다. 이렇게 하면 다른 에디터 창이 렌더 스레드 및 GPU에서 시간을 소비하지 않으므로 성능 데이터에 영향을 줍니다. 플레이 모드가 최대화된 뷰에서 열리면 타겟 기기의 해상도에 더 가까운 해상도로 애플리케이션을 실행합니다. 이는 필레이트와 관련된 성능 문제에 직접적인 영향을 줍니다.

플레이 모드에서 프로파일링

프로파일러의 기본 타겟은 플레이 모드이며, 에디터가 플레이 모드에서 실행 중일 때의 활동을 기록합니다. 플레이 모드 프로파일링은 플레이어를 다시 빌드하지 않고 변경 사항을 빠르게 테스트할 때 유용하지만, 애플리케이션의 타겟 플랫폼 및 기기에서 빌드를 확인하기 위한 대체 옵션으로 사용해서는 안 됩니다. 이는 플레이 모드가 에디터와 동일한 애플리케이션과 메인 스레드에서 실행되기 때문입니다. 즉 플레이 모드에서 프로파일링하면 UI, 인스펙터, 씬 뷰 렌더링, 에셋 관리 등과 같은 에디터의 시스템이 애플리케이션의 성능 및 메모리 프로파일링 측정에 영향을 줍니다.

플레이 모드에서 효과적으로 프로파일링하려면 정기적으로 애플리케이션 빌드를 만들어 다양한 타겟 기기(고사양 및 저사양 기기 모두)에 배포하고, 이러한 기기에서 애플리케이션을 테스트 및 프로파일링해야 합니다. 이러한 기기에서 애플리케이션의 성능 문제를 식별하는 경우 가장 주의가 필요한 영역으로 범위를 좁히십시오.

그런 다음 플레이 모드에서 애플리케이션을 프로파일링하고 애플리케이션의 변경 사항에 대한 반복 작업을 빠르게 수행할 수 있습니다. 타겟 기기에서 애플리케이션을 프로파일링하여 얻은 정보를 사용하여 플레이 모드에서 애플리케이션을 프로파일링한 후 유사한 동작이 있는지 확인할 수 있습니다. 그러고 나서 플레이 모드에서 애플리케이션과 프로파일을 다시 변경한 후 변경한 효과를 빠르게 확인할 수 있습니다. 변경 사항에 만족하면 애플리케이션을 빌드하고 타겟 기기에 다시 배포하여 변경 사항을 확인하십시오.

PlayerLoop 및 EditorLoop 샘플

플레이 모드를 실행하는 동안 에디터가 생성하는 프로파일링 데이터의 노이즈와 잘못된 측정을 줄이기 위해 CPU 및 GPU 프로파일러 모듈은 타이밍을 PlayerLoop에서 발생하는 타이밍과 EditorLoop에서 발생하는 타이밍으로 분할합니다. Unity는 PlayerLoop 및 EditorLoop 마커를 사용하여 이러한 타입의 프로파일러 샘플을 할당합니다.

프로파일러가 플레이 모드를 대상으로 하는 경우 PlayerLoop 내부에서 발생한 타이밍 샘플만 수집합니다.

Unity는 CPU 프로파일러 모듈 차트에서 모든 EditorLoop 샘플을 Others로 분류합니다. 그 결과, EditorLoop 샘플은 해당 카테고리에 가장 크게 기여합니다. 이때 에디터가 수행하는 작업을 확인하고 Others 카테고리에 기여하는 상세한 분석 데이터를 얻으려면 프로파일러 타겟을 에디터로 변경하십시오.

중요: 세부 프로파일링을 사용하고 플레이 모드를 대상으로 하는 경우 PlayerLoop와 EditorLoop 둘 다에서 발생하는 모든 함수 호출에 성능 영향을 미칩니다. 이는 세부 프로파일링이 도메인 재로드 시 스크립팅 메서드의 시작 및 끝 부분에 연결되고, PlayerLoop에서 호출되지 않는 부분을 감지하지 않기 때문입니다. EditorLoop에서 발생하는 메서드 호출은 샘플 생성의 전체 오버헤드를 유발하지 않지만, 샘플을 방출해야 하는지 계속 확인하므로, 작은 오버헤드를 여전히 발생시킵니다.

에디터 프로파일링

프로파일러의 타겟을 Editor로 변경하면 이전에 EditorLoop 마커 아래에 숨겨져 있던 모든 샘플이 해당 카테고리에 기여합니다. 즉 CPU 프로파일러 모듈의 세부 정보 창과 해당 차트에 있는 정보가 크게 변경됩니다.

에디터의 시작 시간을 프로파일링하려면 -profiler-enable 커맨드 라인 옵션을 사용하여 에디터를 시작하십시오.

프로파일러 창이 에디터 성능에 미치는 영향을 줄이려면 자체 프로세스에서 프로파일러 창을 여는 스탠드얼론 프로파일러를 사용하십시오. 이는 에디터를 프로파일링 타겟으로 선택하거나 애플리케이션에 대해 세부 프로파일링을 수행하는 경우 특히 유용합니다. 프로파일러 창 자체가 일반적으로 성능 데이터를 왜곡할 수 있는 리소스를 사용하기 때문입니다.

애플리케이션 프로파일링을 위한 베스트 프랙티스

애플리케이션을 프로파일링할 때 프로파일링 세션 간에 일관성을 보장하고 Unity가 사용하는 프로세스가 프로파일링 데이터에 영향을 미치지 않도록 하기 위해 몇 가지 작업을 수행할 수 있습니다.

  • 프로파일러 창에 조사하려는 영역과 관련된 Profiler 모듈만 추가합니다. 모듈을 프로파일러에 추가하고 제거하려면 프로파일러 창의 왼쪽 상단에 있는 드롭다운을 선택합니다.
  • 세부 프로파일링을 사용하면 오버헤드가 증가할 수 있으므로 사용하지 않도록 합니다. GC.Alloc 또는 JobFence.Complete와 같은 마커가 있는 샘플에 대한 자세한 내용을 보려면 프로파일러 창 툴바로 이동하여 Call Stacks 설정을 활성화합니다. 이렇게 하면 샘플의 전체 호출 스택을 제공하므로 세부 프로파일로 인한 오버헤드 발생 없이 필요한 정보를 제공합니다.
  • 프로파일러가 데이터를 수집할 때 업데이트되는 계층 구조(Hierarchy) 또는 Timeline 뷰를 볼 필요가 없는 경우 Live 설정을 비활성화합니다 창에서 데이터 업데이트를 확인하려면 기록을 중지하면 됩니다.
  • F9 단축키를 사용하여 프로파일러를 활성화 또는 비활성화합니다. 이 단축키를 사용하면 프로파일러 창을 열지 않고도 성능 데이터를 캡처할 수 있습니다. 스탠드얼론 프로파일러를 연 경우 이 단축키를 사용하면 이 창에서 기록이 시작됩니다.

  • 2019.3에서 세부 프로파일링 지원 추가됨 NewIn20193
프로파일러 개요
일반 프로파일러 마커