Unity 프로파일러 API 가이드
Unity에서 애플리케이션의 성능을 분석하고 개선하기 위한 도구인 Unity 프로파일러 API에 대한 간단한 가이드를 제공하겠습니다. 이 문서에서는 프로파일러의 개요, 사용법 및 예제를 포함합니다.
프로파일러란?
Unity 프로파일러는 애플리케이션의 성능을 이해하고 개선하기 위해 사용할 수 있는 도구입니다. 이를 사용하면 애플리케이션의 Unity 네이티브 코드와 관리되는 코드의 함수 호출에 대한 프레임 시간 분석을 수행할 수 있습니다.
주요 API 인터페이스
IUnityProfiler
이 인터페이스는 C/C++ 네이티브 플러그인 코드에서 Unity 프로파일러에 계측 이벤트를 추가하는 데 사용됩니다.
IUnityProfilerCallbacks
이 인터페이스는 Unity 프로파일러 이벤트를 가로채고 저장하거나 다른 도구로 리디렉션하기 위해 사용됩니다.
메서드 설명
메서드 | 설명 |
---|---|
CreateMarker | 명명된 계측 범위를 나타내는 프로파일러 마커를 만듭니다. |
SetMarkerMetadataName | 프로파일러 마커에 대한 커스텀 파라미터 이름을 지정합니다. |
BeginSample | 프로파일러 마커의 이름을 따라 계측 섹션을 시작합니다. |
EndSample | 계측 섹션을 종료합니다. |
EmitEvent | 메타데이터가 포함된 일반 이벤트를 방출합니다. |
IsEnabled | 프로파일러가 데이터를 캡처하는 경우 1을 반환합니다. |
IsAvailable | 프로파일러를 사용할 수 있는 에디터의 경우 1, 릴리스의 경우 0 반환. |
RegisterThread | 지정된 이름으로 현재 스레드를 등록합니다. |
UnregisterThread | 프로파일러에서 현재 스레드의 등록을 해제합니다. |
사용 예제
다음은 프로파일러 창에 이벤트를 추가하는 예제입니다.
# include <IUnityInterface.h>
# include <IUnityProfiler.h>
static IUnityProfiler* s_UnityProfiler = NULL;
static const UnityProfilerMarkerDesc* s_MyPluginMarker = NULL;
static bool s_IsDevelopmentBuild = false;
static void MyPluginWorkMethod()
{
if (s_IsDevelopmentBuild)
s_UnityProfiler->BeginSample(s_MyPluginMarker);
// Unity Profiler에서 보려는 코드.
// ...
if (s_IsDevelopmentBuild)
s_UnityProfiler->EndSample(s_MyPluginMarker);
}
extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginLoad(IUnityInterfaces* unityInterfaces)
{
s_UnityProfiler = unityInterfaces->Get<IUnityProfiler>();
if (s_UnityProfiler == NULL)
return;
s_IsDevelopmentBuild = s_UnityProfiler->IsAvailable() != 0;
s_UnityProfiler->CreateMarker(&s_MyPluginMarker, "MyPluginMethod", kUnityProfilerCategoryOther, kUnityProfilerMarkerFlagDefault, 0);
}
extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginUnload()
{
s_UnityProfiler = NULL;
}
IUnityProfilerCallbacks API
이 API는 Unity 보조 시스템과 타사 프로파일링 API 간의 인터페이스를 제공합니다. 여러 버전의 Unity에서 지원되며, 성능 분석을 위한 계측 데이터를 캡처할 수 있습니다.
프로파일러 기능 | 설명 |
---|---|
카테고리 | 프로파일 데이터를 카테고리별로 그룹화합니다. |
사용 플래그 | 불필요한 정보를 제거하여 외부 도구로 전송 시 데이터 양을 줄입니다. |
프레임 이벤트 | 외부 프로파일링 툴에서 프레임 시간 분석을 수행할 수 있습니다. |
스레드 프로파일링 | 모든 스레드에 대한 프로파일링을 활성화할 수 있습니다. |
최소 콜백 집합 사용 예제
다음 예제는 Unity 프로파일러에서 외부 프로파일러로 계측 시작 및 종료 이벤트를 전달합니다.
# include <IUnityInterface.h>
# include <IUnityProfilerCallbacks.h>
static IUnityProfilerCallbacks* s_UnityProfilerCallbacks = NULL;
static void UNITY_INTERFACE_API MyProfilerEventCallback(const UnityProfilerMarkerDesc* markerDesc, UnityProfilerMarkerEventType eventType, unsigned short eventDataCount, const UnityProfilerMarkerData* eventData, void* userData)
{
switch (eventType)
{
case kUnityProfilerMarkerEventTypeBegin:
{
MyProfilerPushMarker(markerDesc->name);
break;
}
case kUnityProfilerMarkerEventTypeEnd:
{
MyProfilerPopMarker();
break;
}
}
}
static void UNITY_INTERFACE_API MyProfilerCreateMarkerCallback(const UnityProfilerMarkerDesc* markerDesc, void* userData)
{
s_UnityProfilerCallbacks->RegisterMarkerEventCallback(markerDesc, MyProfilerEventCallback, NULL);
}
extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginLoad(IUnityInterfaces* unityInterfaces)
{
s_UnityProfilerCallbacks = unityInterfaces->Get<IUnityProfilerCallbacks>();
s_UnityProfilerCallbacks->RegisterCreateMarkerCallback(&MyProfilerCreateMarkerCallback, NULL);
}
extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginUnload()
{
s_UnityProfilerCallbacks->UnregisterCreateMarkerCallback(&MyProfilerCreateMarkerCallback, NULL);
s_UnityProfilerCallbacks->UnregisterMarkerEventCallback(NULL, &MyProfilerEventCallback, NULL);
}
결론
Unity 프로파일러 API는 애플리케이션의 성능을 깊이 분석하고 최적화하는 데 매우 유용합니다. 이 문서에서 제공한 정보와 예제를 통해 기본적인 사용법을 익히고, 이를 다양한 프로젝트에 적용해 보시기 바랍니다. 더 많은 기능과 개선 사항은 Unity 공식 문서를 참조하시기 바랍니다.