Unity 프로파일러 - 프로파일러 창을 사용하여 성능 문제 진단

2022. 8. 29. 11:12Public/Unity

소개

게임이 느리게 실행되거나 더듬거리거나 멈추는 경우 성능 문제가 있다는 것을 알고 있습니다. 문제를 해결하기 전에 문제의 원인에 대해 더 많이 알아야 합니다. 다른 문제에는 매우 다른 솔루션이 필요합니다. 무엇이 잘못되었는지 추측하거나 다른 프로젝트에서 작업한 내용을 기반으로 변경하려고 하면 시간을 낭비하거나 문제를 더 악화시킬 수 있습니다.
여기서 프로파일링이 시작됩니다. 프로파일링은 런타임에 게임 성능 측면을 측정하는 프로세스입니다. 프로파일링 도구를 사용하여 게임이 실행될 때 배후에서 무슨 일이 일어나고 있는지 볼 수 있고 이 정보를 사용하여 성능 문제의 원인을 추적할 수 있습니다. 프로파일링 도구를 변경하면서 관찰함으로써 변경 결과를 측정할 수 있으므로 문제를 해결하려는 노력이 효과적인지 여부를 알 수 있습니다.

 

이 문서에서는 다음을 수행합니다.

  •  Unity 내장 프로파일러 창을 사용하여 성능이 저조한 게임에 대한 데이터 수집
  • 이 데이터를 분석하고 이 분석 결과를 사용하여 성능 문제의 원인을 추적합니다.
  • 이러한 특정 문제 해결에 대한 기사 링크 찾기

게임을 빠르고 원활하게 실행하는 것은 균형을 유지하는 작업입니다. 우리가 원하는 결과를 얻기 전에 변경을 수행하고 이러한 변경의 효과를 측정하는 데 여러 라운드가 걸릴 수 있습니다. 프로파일링 도구를 사용하여 문제를 분석하는 방법을 안다는 것은 무엇이 잘못되었는지 식별하고 다음에 시도해야 할 것을 이해할 수 있다는 것을 의미합니다.

 

 

시작하기 전에

이 문서는 느리게 실행되거나, 끊기거나, 멈추는 Unity 게임의 문제를 추적하는 데 도움이 됩니다. 게임에 다른 문제가 있는 경우(예: 게임이 충돌하거나 그래픽이 예상한 것처럼 보이지 않는 경우) 이 문서는 문제를 해결하는 데 도움이 되지 않을 것입니다. 이 문서에서 다루지 않은 게임 문제가 있는 경우 Unity 매뉴얼, Unity 포럼 또는 Unity Answers를 검색해 볼 수 있습니다.

 

 

게임에서의 성능에 대한 간략한 소개

프레임 속도는 게임 성능의 표준 척도입니다. 게임에서 프레임은 애니메이션의 프레임과 같습니다. 그것은 화면에 그려진 우리 게임의 정지 이미지입니다. 화면에 프레임을 그리는 것을 프레임 렌더링이라고 합니다. 프레임 속도 또는 프레임이 렌더링되는 속도는 FPS(초당 프레임 수)로 측정됩니다.
대부분의 최신 게임은 60FPS의 프레임 속도를 달성하는 것을 목표로 합니다. 일반적으로 30FPS 이상의 프레임 속도는 허용 가능한 것으로 간주되며, 특히 퍼즐 게임이나 어드벤처 게임과 같이 빠른 반응이 필요하지 않은 게임의 경우 그렇습니다. 일부 프로젝트에는 특별한 요구 사항이 있습니다. 예를 들어 VR에서는 90FPS가 중요한 것으로 간주됩니다. 30FPS 미만의 프레임 속도에서 플레이어는 일반적으로 경험이 불편합니다. 그래픽이 불안정하게 보일 수 있고 컨트롤이 응답하지 않을 수 있습니다. 그러나 중요한 것은 속도만이 아닙니다. 프레임 속도도 일정해야 합니다. 프레임 속도의 변화는 플레이어에게 매우 눈에 띄며 일관되지 않은 프레임 속도는 일반적으로 낮지만 안정적인 프레임 속도보다 더 나쁜 것으로 간주됩니다.
프레임 속도는 게임의 성능에 대해 이야기하는 일반적인 방법이지만 게임의 성능을 향상시키려고 할 때 프레임을 밀리초 단위로 렌더링하는 데 걸리는 시간을 생각하는 것이 더 유용합니다. 이것은 두 가지 이유 때문입니다. 첫째, 이것은보다 정확한 측정입니다. 게임의 성능을 향상시키려고 할 때 1000분의 1초가 목표에 도달할 수 있습니다. 둘째, 프레임 속도의 상대적인 변화는 스케일에 따라 매우 다른 것을 의미합니다. 60FPS에서 50FPS로 변경하면 추가 처리 시간이 3.3ms이지만 30FPS에서 20FPS로 변경하면 추가 처리 시간이 16.6ms입니다. 이 두 가지 예는 모두 10FPS 하락이지만 프레임을 렌더링하는 데 걸리는 시간의 차이는 상당합니다.
일반적인 프레임 속도를 충족하기 위해 프레임을 렌더링해야 하는 시간(밀리초)을 이해하는 것이 유용합니다. 이 수치를 찾으려면 공식 1000/[원하는 프레임 속도]를 따라야 합니다. 이 공식을 사용하여 게임이 초당 30프레임을 렌더링하려면 각 프레임을 33.3밀리초 이내에 렌더링해야 함을 알 수 있습니다. 게임이 60FPS로 실행되려면 각 프레임을 16.6밀리초 이내에 렌더링해야 합니다.
렌더링되는 모든 프레임에 대해 Unity는 다양한 작업을 수행해야 합니다. 간단히 말해서 Unity는 게임의 상태를 업데이트하고 게임의 스냅샷을 찍은 다음 해당 스냅샷을 화면에 그려야 합니다. 각 프레임 동안 발생해야 하는 작업에는 사용자 입력 읽기, 스크립트 실행 및 조명 계산 수행과 같은 작업이 포함됩니다. 이 외에도 물리 계산과 같이 단일 프레임 동안 여러 번 발생할 수 있는 작업이 있습니다. 이러한 모든 작업이 충분히 빠르게 수행되면 게임은 일관되고 수용 가능한 프레임 속도를 갖게 됩니다. 이러한 모든 작업을 충분히 빠르게 수행할 수 없으면 프레임을 렌더링하는 데 너무 오래 걸리고 프레임 속도가 떨어집니다.
수행하는 데 너무 오래 걸리는 작업을 아는 것은 성능 문제를 해결하는 방법을 아는 데 중요합니다. 프레임 속도를 줄이는 작업을 알게 되면 게임의 해당 부분을 최적화할 수 있습니다. 이것이 프로파일링이 중요한 이유입니다. 프로파일링 도구는 주어진 프레임에서 각 작업에 걸리는 시간을 보여줍니다.

 

프로파일링 데이터 기록

성능 문제를 조사하려면 먼저 성능이 저조한 게임 부분의 프로파일링 데이터를 기록해야 합니다. 정확한 프로파일링 데이터를 얻기 위해 게임의 개발 빌드를 만들고 게임이 대상 하드웨어에서 실행되는 동안 프로파일링 데이터를 기록합니다.

 

게임 개발 빌드의 데이터 기록

  • 대상 장치에서 게임의 개발 빌드를 만듭니다.
  • 성능 문제가 있는 게임 부분에 도달하기 직전에 프로파일링 데이터 기록을 시작합니다.
  • 성능 문제의 예가 포함된 프로파일링 데이터를 기록했으면 프로파일러창 상단의 아무곳이나 클릭하여 게임을 일시중지하고 프레임을 선택합니다.
  • 프로파일러 창 상단에서 성능이 좋지 않은 프레임을 선택합니다. 이것은 "스파이크'이거나 프레임 속도가 원하는 값보다 낮은 일반적인 프레임일 수 있습니다. 프로파일러 창에서 왼쪽 및 오른쪽 화살표 키 또는 뒤로 및 앞으로 아이콘 버튼을 사용하여 더 세밀한 제어를 위해 프레임 사이를 이동할 수 있습니다.

출처:유니티

 

 

 

 

프로파일링 데이터 분석

성능 문제의 원인에 대한 결론을 내리기 전에 프로파일러 창에 표시되는 성능 데이터를 읽고 분석하는 방법을 배워야 합니다. 알다시피 프레임 속도 하락은 Unity가 프레임을 적시에 렌더링하는 데 필요한 모든 작업을 완료할 수 없을 때 발생합니다. 프로파일러 창을 사용하여 수행 중인 작업, 작업 소요 시간 및 작업 순서를 확인합니다. 이 정보는 게임의 어떤 부분이 프레임을 렌더링하는 데 너무 오래 걸리는 원인이 되는지 이해하는 데 도움이 됩니다. .
정확한 단계의 순서를 배우려고 하는 것보다 프로파일링하는 방법을 배우는 것이 가장 좋습니다. 데이터를 스스로 해석하여 새로운 문제에 직면했을 때 스스로 조사할 수 있도록 하는 것이 훨씬 더 유용합니다. Unity Answers에서 검색할 내용만 배운다고 해도 좋은 시작입니다!
프로파일링하는 방법을 배우기 위해 CPU 사용량 프로파일러를 예로 사용합니다. 이것은 프레임 속도 문제를 조사할 때 가장 많이 사용할 프로파일러일 것입니다.

 

 

[CPU 프로파일러]

프로파일러 창 상단에 있는 CPU 사용량 프로파일러를 보면 각 프레임 동안 CPU가 작업을 완료하는 데 걸리는 시간을 볼 수 있습니다.

출처 : 유니티

 

우리는 그 시간이 어떻게 소비되었는지에 대한 색상으로 구분된 분석을 볼 수 있습니다. 다른 색상은 렌더링 작업, 물리 계산 등에 소요된 시간을 나타냅니다. 프로파일러의 키는 어떤 색상이 어떤 작업을 나타내는지 나타냅니다.
다음 스크린샷에서 이 프레임의 대부분의 시간이 렌더링 작업에 사용됨을 알 수 있습니다. 다음 이미지 하단의 CPU 시간 표시기는 이 프레임의 총 CPU 시간이 85.95ms임을 나타냅니다.

출처:유니티

 

 

[하이어라키 뷰]

CPU 사용량 프로파일러의 계층 보기를 사용하여 이 정보를 더 자세히 살펴보고 이 프레임 동안 가장 많은 CPU 시간을 차지하는 작업을 정확히 확인하겠습니다. CPU 사용량 프로파일러를 선택하면 프로파일러 창 하단에서 프레임에 대한 자세한 정보를 볼 수 있습니다. 프로파일러 창의 아래쪽을 보면 왼쪽 상단의 드롭다운 메뉴를 사용하여 계층 보기를 선택할 수 있습니다. 이를 통해 발생하는 CPU 작업에 대한 자세한 정보를 볼 수 있습니다.

출처:유니티

 

하이어라키 뷰 내에서 열 머리글을 클릭하면 해당 열의 값을 기준으로 정보가 정렬됩니다. 예를 들어, 시간 ms를 클릭하면 가장 오래 걸리는 함수를 기준으로 함수를 정렬하고, 호출을 클릭하면 현재 강조 표시된 프레임 동안 호출된 횟수를 기준으로 함수를 정렬합니다. 위의 스크린샷에서 우리는 함수를 시간별로 정렬했고 CPU 시간을 가장 많이 차지하는 작업이 Camera.Render 함수임을 알 수 있습니다.

 

함수 이름 왼쪽에 화살표가 있는 경우 확장하여 해당 함수에 의해 호출되는 다른 함수와 성능에 미치는 영향을 확인할 수 있습니다. Self ms 열은 함수 자체에 소요된 시간을 나타내고 Time ms는 이 함수와 이 함수가 호출하는 다른 모든 함수에 소요된 시간을 나타냅니다.

 

출처:유니티

 

이 경우 Camera.Render 내에서 가장 비용이 많이 드는 함수가 Shadows.RenderJob이라는 함수와 관련되어 있음을 알 수 있습니다. 이 특정 기능에 대해 아직 많이 알지 못하더라도 문제에 대한 정보는 이미 많이 있습니다. 우리의 문제는 렌더링과 관련되어 있으며 이 시점에서 발생하는 가장 비용이 많이 드는 작업은 그림자와 관련이 있다는 것을 알고 있습니다.

 

하이어라키 뷰에서 할 수 있는 또 다른 유용한 작업은 게임 내의 프레임을 비교하여 시간이 지남에 따라 성능이 어떻게 변하는지 이해할 수 있도록 하는 것입니다. CPU 사용량 프로파일러를 사용하여 프레임에서 프레임으로 개별 기능의 비용을 추적할 수 있습니다. 계층 보기에서 함수 이름을 클릭하면 CPU 사용량 프로파일러가 프로파일러 창 상단의 그래프에서 해당 함수의 기여도를 강조 표시합니다.

출처:유니티

예를 들어 하이어라키 뷰에서 Gfx.WaitForPresent를 클릭하면 Gfx.WaitForPresent와 직접 연결된 렌더링 데이터 부분이 그래프에서 강조 표시됩니다.

 

 

[타임라인 뷰]

 

이제 CPU 사용량 프로파일러의 타임라인 보기를 사용하여 렌더링 문제에 대해 자세히 알아보겠습니다. 타임라인 보기는 CPU 작업이 수행되는 순서와 어떤 스레드가 어떤 작업을 담당하는지라는 두 가지를 보여줍니다. 프로파일러 창의 하단 왼쪽 모서리에 있는 드롭다운 메뉴를 사용하여 타임라인 보기를 선택할 수 있습니다(이전에는 계층 구조라고 읽음).

출처:유니티

스레드를 사용하면 별도의 작업을 동시에 수행할 수 있습니다. 한 스레드가 하나의 작업을 수행하는 동안 다른 스레드는 완전히 별도의 작업을 수행할 수 있습니다. Unity의 렌더링 프로세스에는 세 가지 유형의 스레드가 있습니다: 메인 스레드, 렌더 스레드 및 작업자 스레드. 어떤 스레드가 어떤 작업을 담당하는지 아는 것이 매우 유용합니다. 가장 느린 작업이 어떤 스레드에서 발생하는지 알게 되면 해당 스레드를 수행하는 작업을 최적화하는 데 노력을 집중해야 한다는 것을 알게 됩니다..

출처:유니티

타임라인 보기를 확대하여 개별 작업을 자세히 볼 수 있습니다. 다른 함수에 의해 호출된 함수는 바로 아래에 표시됩니다. 이 예에서는 이 작업을 구성하는 개별 작업을 보기 위해 Shadows.RenderJob을 확대했습니다. Shadows.RenderJob이 메인 스레드에서 발생하는 함수를 호출하는 것을 볼 수 있습니다. 그림자와 관련된 작업을 수행하는 작업자 스레드도 볼 수 있습니다. 기본 스레드에 WaitingForJob이라는 작업이 있다는 것은 기본 스레드가 작업자 스레드가 작업을 완료하기를 기다리고 있음을 나타냅니다. 이로부터 그림자와 관련된 렌더링 작업이 메인 스레드와 작업자 스레드에서 너무 오래 걸린다는 결론을 내릴 수 있습니다. 우리는 이제 우리의 문제에 대해 많이 알고 있습니다!

 

[기타 프로파일러]

CPU 사용량 프로파일러는 프레임 속도와 관련된 성능 문제를 추적할 때 가장 일반적으로 사용되는 프로파일러이지만 다른 프로파일러도 매우 유용할 수 있습니다. 그들이 제공하는 정보에 익숙해지는 것이 좋습니다.
몇 가지 다른 프로파일러에 대해 위의 단계를 따르고 다른 보기를 시도하고 각 프레임에서 제공하는 정보를 학습하십시오. 예를 들어 렌더링 프로파일러를 사용하여 렌더링 통계가 프레임마다 어떻게 변하는지 확인하십시오.

 

 

 

 

성능 문제의 원인 파악

이제 프로파일러 창에서 성능 데이터를 읽고 분석하는 프로세스에 익숙해졌으므로 성능 문제의 원인을 찾기 시작할 수 있습니다.

 

VSync 제외

 

VSync로 알려진 수직 동기화는 게임의 프레임 속도를 게임이 표시되는 화면의 재생 빈도와 일치시키는 데 사용됩니다. VSync는 게임의 프레임 속도에 영향을 줄 수 있으며 그 효과는 프로파일러 창에 표시될 수 있습니다. 무엇을 보고 있는지 확실하지 않으면 성능 문제처럼 보일 수 있으므로 더 진행하기 전에 조사에서 VSync를 제외하는 방법을 배워야 합니다.

 

CPU 사용량 프로파일러에서 VSync 정보 숨기기

 

CPU 사용량 프로파일러 그래프에서 정보를 숨기도록 선택할 수 있습니다. 이를 통해 현재 조사에 유용하지 않은 정보를 무시할 수 있습니다.

 

CPU 사용량 프로파일러 그래프에서 VSync 정보를 숨기려면 다음 단계를 따르십시오.

 

  • CPU 사용량 프로파일러를 클릭하여 선택합니다.
  • CPU 사용량 프로파일러가 시간 경과에 따른 데이터를 표시하는 프로파일러 창의 상단에서 VSync라고 표시된 노란색 사각형을 클릭하여 그래프에서 VSync 정보를 숨깁니다.

 

하이어라키 뷰에서 VSync 정보 무시

 

CPU 사용량 프로파일러의 Hierarchy 뷰에서 VSync 정보를 숨길 수 있는 방법은 없지만 무시할 수 있도록 VSync 정보가 어떻게 보이는지 알 수 있습니다.
Hierarchy 뷰에서 WaitForTargetFPS라는 함수를 볼 때마다 이는 게임이 VSync를 기다리고 있음을 의미합니다. 이 기능을 조사할 필요가 없으며 무시해도 됩니다.

 

 

VSync 비활성화

 

VSync는 모든 플랫폼에서 비활성화할 수 없습니다. 많은 플랫폼(예: iOS)에서 VSync를 강제로 사용합니다. 

그러나 VSync를 적용하지 않는 플랫폼용으로 개발 중인 경우 프로파일링하는 동안 프로젝트에서 VSync를 완전히 비활성화할 수 있습니다. VSync를 비활성화하려면 상단 메뉴 표시줄로 이동하고 Edit > Project Settings > Quality를 선택하여

 Quality 탭을 엽니다. VSync Count라는 드롭다운 메뉴에서 Don't Sync를 선택합니다.

 

 

 

Rendering profiling

렌더링은 성능 문제의 일반적인 원인입니다. 렌더링 문제를 해결하기 전에 게임이 CPU 바운드인지 GPU 바운드인지 식별하는 것이 중요합니다. 이러한 상황에는 서로 다른 접근 방식이 필요하기 때문입니다.
간단히 말해서 중앙 처리 장치(CPU)는 그려야 할 대상을 결정하고 그래픽 처리 장치(GPU)는 그림을 그리는 역할을 합니다. 렌더링 성능 문제가 CPU가 프레임을 렌더링하는 데 너무 오래 걸리기 때문에 발생하는 경우 CPU 바운드로 알려진 게임입니다. 렌더링 성능 문제가 GPU가 프레임을 렌더링하는 데 너무 오래 걸리기 때문에 발생하는 경우 GPU 바운드로 알려진 게임입니다.

 

게임이 GPU 바운드인지 식별하는 방법

게임이 GPU 바운드인지 확인하는 가장 빠른 방법은 Unity의 GPU 사용 프로파일러를 사용하는 것입니다. 불행히도 모든 장치와 드라이버가 이 프로파일러를 지원하는 것은 아닙니다. 게임이 GPU 바운드인지 확인하기 전에 먼저 대상 장치에서 GPU 사용량 프로파일러를 사용할 수 있는지 확인해야 합니다.
GPU 사용량 프로파일러를 대상 장치에서 사용할 수 있는지 확인하려면 다음 단계를 수행해야 합니다.

  • 프로파일러 창의 왼쪽 상단에서 프로파일러 모듈 드롭다운을 클릭합니다.
  • 드롭다운 메뉴에서 GPU를 선택합니다.

GPU 사용량 프로파일러가 대상 장치에서 지원되지 않는 경우 GPU 사용량 프로파일러가 일반적으로 데이터를 표시하는 "GPU 프로파일링이 지원되지 않습니다"라는 메시지가 표시됩니다.

 

 

이 메시지가 표시되지 않으면 GPU 사용량 프로파일러가 대상 장치에서 지원된다는 의미입니다. 이 경우에 GPU 사용량 프로파일러를 사용할 수 있는 경우 다음 단계를 수행하여 게임이 GPU 바운드인지 빠르고 쉽게 확인할 수 있습니다.

  • GPU 사용량 프로파일러를 클릭하여 선택합니다.
  • 현재 선택된 프레임의 CPU 및 GPU 시간이 표시되는 화면 중앙의 영역을 보십시오.

출처:유니티

대상 하드웨어에 대해 GPU 사용량 프로파일러를 사용할 수 없는 경우에도 게임이 GPU에 바인딩되어 있는지 CPU 사용량을 관찰하여 확인할 수 있습니다.

CPU가 GPU가 작업을 완료하기를 기다리고 있다는 것을 알 수 있다면, 이는 게임이 GPU에 묶여 있다는 것을 의미합니다. 이러한 경우인지 확인하기 위해 다음 단계를 수행할 수 있습니다.

  • CPU 사용량 프로파일러를 클릭하여 선택합니다.
  • 현재 선택된 프레임 및 프로파일러에 대한 자세한 정보를 표시하는 프로파일러 창 하단의 영역을 검사합니다.
  • 이 영역의 왼쪽 상단에 있는 드롭다운 메뉴에서 Hierarchy를 선택합니다.
  • 밀리초 단위의 시간을 기준으로 함수를 정렬하려면 Time ms 탭을 선택합니다.

Gfx.WaitForPresent 함수가 CPU 사용량 프로파일러에서 가장 오래 걸리는 경우 CPU가 GPU를 기다리고 있음을 나타냅니다. 이것은 우리 게임이 이 시점에서 GPU 바운드임을 의미합니다.

출처 : 유니티

 

게임이 GPU 바인딩된 경우 렌더링 문제 해결

게임이 GPU 바운드임을 확인했다면

성능 문제 수정 : Unity 게임에서 그래픽 렌더링 최적화에 대한 자습서를 읽어야 합니다.

 

 

 

 

게임이 CPU 바운드인지 식별

성능 문제의 원인을 아직 확인하지 못했다면 이제 CPU 기반 렌더링 문제를 조사해 보겠습니다.

 

  • CPU 사용량 프로파일러를 클릭하여 선택합니다.
  • CPU 사용량 프로파일러가 시간 경과에 따른 데이터를 표시하는 프로파일러 창의 상단에서 렌더링을 나타내는 그래프의 색상 부분을 검사합니다.
  • 키에서 이름 옆에 색상이 지정된 사각형을 클릭하여 그래프에서 데이터를 숨기거나 표시할 수 있습니다.

 

느린 프레임의 프레임 시간 중 많은 부분이 렌더링에 의해 사용되는 경우 렌더링이 문제의 원인일 수 있음을 나타냅니다. 다음 단계에 따라 프로파일링 데이터를 파고들어 이를 확인할 수 있습니다.

 

  • CPU 사용량 프로파일러를 클릭하여 선택합니다.
  • 현재 선택된 프레임 및 프로파일러에 대한 자세한 정보를 표시하는 프로파일러 창 하단의 영역을 검사합니다.
  • 이 영역의 왼쪽 상단에 있는 드롭다운 메뉴에서 Hierarchy를 선택합니다.
  • 밀리초 단위의 시간을 기준으로 함수를 정렬하려면 Time ms 열을 선택합니다.
  • 목록 상단의 기능을 클릭하여 선택합니다.

 

선택한 기능이 렌더링 기능인 경우 CPU 프로파일러 그래프는 이를 렌더링 디스플레이의 일부로 강조 표시합니다. 이 경우 렌더링 관련 작업으로 인해 게임이 제대로 수행되지 않고 이 시점에서 게임이 CPU 바운드임을 의미합니다. 함수 이름과 함수를 수행하는 스레드를 확인합니다. 이 정보는 문제를 해결하려고 할 때 유용합니다.

 

 

게임이 CPU 바운드일 때 렌더링 문제 해결
렌더링 문제로 인해 게임이 CPU 바운드임을 확인했다면 성능 문제 수정: Unity 게임에서 그래픽 렌더링 최적화 자습서를 읽어야 합니다.

 

 

가비지 컬렉션 프로파일링

다음으로 가비지 컬렉션이 병목 현상을 일으키는지 확인합니다. 가비지 컬렉션은 Unity의 자동 메모리 관리와 관련된 기능으로 작업 속도가 느릴 수 있습니다.

 

 

  • CPU 사용량 프로파일러를 클릭하여 선택합니다.
  • CPU 사용량 프로파일러가 시간 경과에 따른 데이터를 표시하는 프로파일러 창의 상단에서 GarbageCollector를 나타내는 그래프 부분을 검사합니다. 키에서 이름 옆에 있는 색상이 지정된 사각형을 클릭하여 그래프에서 데이터를 숨기거나 표시할 수 있습니다. 관심 있는 특정 측면의 이름을 드래그하여 재정렬할 수도 있습니다. 다음 스크린샷에서 GarbageCollector를 목록의 맨 위로 드래그하고 다른 모든 측면의 색상 상자를 클릭하여 끕니다.

느린 프레임의 프레임 시간 중 많은 부분이 가비지 수집에 의해 사용되는 경우 과도한 가비지 수집에 문제가 있음을 나타낼 수 있습니다. 이를 확인하기 위해 프로파일링 데이터를 파헤칠 수 있습니다.

  • CPU 사용량 프로파일러를 선택한 상태에서 현재 선택된 프레임에 대한 자세한 정보를 표시하는 프로파일러 창 하단의 영역을 검사합니다.
  • 이 영역의 왼쪽 상단에 있는 드롭다운 메뉴에서 Hierarchy을 선택합니다.
  • 밀리초 단위의 시간을 기준으로 함수를 정렬하려면 Time ms 열을 선택합니다.

GC.Collect() 함수가 나타나고 과도한 CPU 시간을 차지하는 경우 게임에서 가비지 수집 문제를 식별한 것입니다.

 

 

가비지 수집 문제 해결
게임에서 가비지 수집 문제를 식별했다면 이 기사를 읽어야 합니다.

 

 

Physics profiling

 

렌더링과 가비지 수집을 배제했다면 복잡한 물리 계산이 성능 문제의 원인인지 확인합시다.

 

  • CPU 사용량 프로파일러를 클릭하여 선택합니다.
  • CPU 사용량 프로파일러가 시간 경과에 따른 데이터를 표시하는 프로파일러 창의 상단에서 Physics를 나타내는 그래프 부분(주황색 그래프)을 검사합니다.

느린 프레임의 프레임 시간 중 많은 부분이 Physics에서 차지하는 경우 Physics가 문제의 원인일 수 있음을 나타냅니다. 이를 확인하기 위해 프로파일링 데이터를 파헤칠 수 있습니다.

 

  • CPU 사용량 프로파일러를 선택한 상태에서 현재 선택된 프레임에 대한 자세한 정보를 표시하는 프로파일러 창 하단의 영역을 검사합니다.
  • 이 영역의 왼쪽 상단에 있는 드롭다운 메뉴에서 하이어라키를 선택합니다.
  • 밀리초 단위의 시간을 기준으로 함수를 정렬하려면 Time ms 열을 선택합니다.
  • 목록 상단의 기능을 클릭하여 선택합니다.

물리 기능인 경우 CPU 프로파일러 그래프는 Physics 디스플레이의 일부로 이를 강조 표시합니다. 이 경우 현재 성능 문제가 물리학과 관련되어 있음을 확인했습니다.


 

물리학 문제 해결

성능 문제가 물리학으로 인한 것임을 확인한 경우 도움이 될 몇 가지 리소스가 있습니다.

 

 

 

Slow scripts

 

이제 느리거나 지나치게 복잡한 스크립트가 성능 문제의 원인인지 확인하겠습니다. 이 컨텍스트에서 스크립트는 Unity 엔진의 일부가 아닌 코드를 의미합니다. 이것은 일반적으로 우리가 직접 작성한 스크립트를 의미하지만, 예를 들어 프로젝트에서 사용하는 플러그인의 일부인 코드가 포함될 수 있습니다.

 

  • CPU 사용량 프로파일러를 클릭하여 선택합니다.
  • CPU 사용량 프로파일러가 시간 경과에 따른 데이터를 표시하는 프로파일러 창의 상단에서 스크립트를 나타내는 그래프 부분을 검사합니다. 이름 옆에 있는 색상이 지정된 사각형을 클릭하여 그래프에서 데이터를 숨기거나 표시할 수 있습니다.

느린 프레임의 프레임 시간 중 많은 부분이 스크립트에 의해 사용되는 경우 느린 사용자 스크립트가 문제의 원인 일 수 있음을 나타냅니다. 이를 확인하기 위해 프로파일링 데이터를 파헤칠 수 있습니다.

 

  • CPU 사용량 프로파일러를 선택한 상태에서 현재 선택된 프레임에 대한 자세한 정보를 표시하는 프로파일러 창 하단의 영역을 검사합니다.
  • 이 영역의 왼쪽 상단에 있는 드롭다운 메뉴에서 하이어라키를 선택합니다.
  • 밀리초 단위의 시간을 기준으로 함수를 정렬하려면 Time ms 열을 선택합니다.
  • 목록 상단의 기능을 클릭하여 선택합니다.

 

사용자 스크립트 기능인 경우 CPU 프로파일러 그래프는 스크립트 표시의 일부로 해당 기능을 강조 표시합니다. 이 경우 현재 성능 문제가 스크립트와 관련되어 있음을 확인했습니다.
위의 예외가 있음을 유의하십시오. 게임에 이미지 효과 스크립트 또는 OnWillRenderObject 또는 OnPreCull 함수 내의 코드와 같은 렌더링과 관련된 코드가 포함되어 있으면 CPU 사용량 프로파일러가 실행될 때 프로파일러 창의 상단에 표시됩니다. 스크립트 데이터가 아닌 렌더링 데이터로.
처음에는 이것이 약간 혼란스러울 수 있지만 평소와 같이 하이어라키 및 Timeline View에서 함수를 검사하면 해당 코드를 추적할 수 있습니다.

 

 

 

출처 : https://learn.unity.com/tutorial/diagnosing-performance-problems?uv=4.x&courseId=5c87de35edbc2a091bdae346#5c7f8528edbc2a002053b598

 

'Public > Unity' 카테고리의 다른 글

모든 노드 정리  (0) 2023.04.06
커스텀 에디터  (0) 2022.11.11
Unity 프로파일러 - The Profiler Window  (0) 2022.08.26
최적화 - 메쉬(Mesh)  (0) 2022.08.24
최적화 - Texture  (0) 2022.08.24