# 코드에 프로파일러 카운터 추가

> Collect specific statistics with profiler counters.

프로파일러 카운터를 추가하려면 다음을 수행하는 스크립트를 생성합니다.

* [새 카운터를 만들고 정의합니다](#creating-and-defining-a-counter).
* [카운터 값을 업데이트합니다](#updating-a-counters-value).

이 섹션의 코드 예시는 프로파일러 카운터를 추가하여 Unity가 게임 오브젝트 트레일 효과의 모든 인스턴스에 대해 생성한 전체 파티클 수를 추적합니다. 이 예시에서 게임 오브젝트의 이름은 Tank입니다.

## 선행 조건

일부 예시에서는 [Profiling Core 패키지](https://docs.unity3d.com/Packages/com.unity.profiling.core@latest)를 사용하므로 시작하기 전에 설치해야 합니다. Unity Profiling Core 패키지는 코어 패키지이므로 패키지 관리자 UI에서 검색할 수 없습니다. 패키지를 설치하려면 다음 중 하나를 수행합니다.

* [패키지 이름으로 추가합니다](/engine/6000.0/manual/packages-list/packages/upm-ui/actions/quick.md)(`com.unity.profiling.core`).
* [이 링크](/engine/6000.0/manual/com-unity-profiling.md)를 통해 설치합니다.

## 카운터 생성 및 정의

새 카운터를 만드는 방법은 다음과 같습니다.

1. 새 카운터의 값 유형을 정의하는 스크립트를 작성합니다.
2. 해당 유형에 이름과 단위를 할당합니다.

**중요:** 카운터를 생성할 때는 새로운 카운터가 속하게 될 프로파일러 카테고리를 지정해야 합니다. 이를 위해서는 [`ProfilerCategory`](/engine/6000.0/manual/unity-profiling.md) 클래스의 기존 Unity 카테고리를 사용하면 됩니다. 다음 예제의 스크립트는 기존 `ProfilerCategory.Scripts` 카테고리를 사용합니다.

Profiler counters API는 푸시 및 풀 작업을 지원합니다. 카운터의 값을 프로파일러로 푸시하거나, 프로파일러가 프레임 마지막에 값을 가져올 수 있습니다.

데이터가 자주 변경되지 않는다면(예: 프레임당 한 번) [`ProfilerCounter`](https://docs.unity3d.com/Packages/com.unity.profiling.core@latest?subfolder=/api/Unity.Profiling.ProfilerCounter-1.html) API를 사용하여 카운터 데이터를 프로파일러로 푸시하십시오. 하나의 프레임에서 데이터가 여러 번 변경된다면 `ProfilerCounterValue` API를 사용하십시오. 이렇게 하면 프로파일러가 프레임이 끝날 때 마지막 값을 자동으로 가져옵니다.

다음 스크립트 예시는 이름이 Tank Trail Particles이고 단위는 [ProfilerMarkerDataUnit.Count](/engine/6000.0/script-reference/unity-profiling/profiler-marker-data-unit/count.md)인 [`ProfilerCounterValue`](https://docs.unity3d.com/Packages/com.unity.profiling.core@latest?subfolder=/api/Unity.Profiling.ProfilerCounter-1.html) `TankTrailParticleCount`를 정의합니다.

```lang-csharp
public static class GameStats
{
   public static readonly ProfilerCategory TanksCategory = ProfilerCategory.Scripts;

   public const string TankTrailParticleCountName = "Tank Trail Particles";
   public static readonly ProfilerCounterValue<int> TankTrailParticleCount =
       new ProfilerCounterValue<int>(TanksCategory, TankTrailParticleCountName, ProfilerMarkerDataUnit.Count,
           ProfilerCounterOptions.FlushOnEndOfFrame | ProfilerCounterOptions.ResetToZeroOnFlush);
}
```

옵션인 `FlushOnEndOfFrame`과 `ResetToZeroOnFlush`는 해당 카운터를 자동으로 프로파일러 데이터 스트림으로 보내고 카운터 값을 프레임 종료 시 0으로 초기화합니다.

## 카운터 값 업데이트

카운터 값을 업데이트하려면 정의한 카운터의 값을 설정하는 MonoBehaviour 스크립트를 생성하십시오.

다음 MonoBehaviour 스크립트는 업데이트 함수의 모든 프레임마다 할당된 게임 오브젝트에 속하는 트레일 파티클의 수를 계산합니다. 이때 `TankTrailParticleCount`라는 카운터가 사용됩니다.

다음 예시 스크립트는 또한 인스펙터에 있는 Trail Particle System (`m_TrailParticleSystem`)이라는 공용 프로퍼티를 생성합니다.

```lang-csharp
 using UnityEngine;

 class TankMovement : MonoBehaviour
 {
    public ParticleSystem m_TrailParticleSystem;

    void Update()
    {
        GameStats.TankTrailParticleCount.Value += m_TrailParticleSystem.particleCount;
    }
 }
```

### 커스텀 프로파일러 모듈에 프로파일러 카운터 추가

코드를 통해 커스텀 프로파일러 모듈에 프로파일러 카운터를 표시하려면, 반드시 새로운 `ProfilerModule` 스크립트를 생성해야 하고 표시되는 카운터, 이름, 아이콘을 포함한 모듈의 프로퍼티를 정의해야 합니다. 이를 수행하는 방법은 [코드에서 프로파일러 모듈 생성](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/customizing/creating-custom-modules.md#creating-profiler-modules-code)을 참조하십시오.

## 추가 리소스

* [코드 서두에 프로파일링 정보 추가](/engine/6000.0/manual/analysis/profiler/adding-information-code/intro.md)
* [코드에 프로파일러 마커 추가](/engine/6000.0/manual/analysis/profiler/adding-information-code/add-markers-code.md)
* [프로파일러 모듈 커스터마이즈](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/customizing.md)
* [Profiling Core 패키지](https://docs.unity3d.com/Packages/com.unity.profiling.core@latest)
