Unity 프로파일러에서 커스텀 지표를 표시하려면 Unity Profiling Core 패키지의 ProfilerCounter API를 사용해야 합니다.
프로파일링 코어 API를 사용하여 애플리케이션의 지표를 추적할 수 있습니다. 카운터가 Unity 프로파일러에서 추적하는 정보를 표시할 수 있습니다. 커스텀 프로파일러 카운터를 사용하여 시스템 지표를 비교하고 프로파일러 창의 성능 문제를 식별합니다.
커스텀 프로파일러 카운터는 ProfilerCounter
또는 ProfilerCounterValue
의 데이터를 표시할 수 있습니다.
Unity 프로파일링 코어 API를 사용하여 프로파일러 카운터를 생성하는 데 대한 상세한 가이드는 프로파일러 카운터 API 가이드를 참조하십시오.
프로파일러 카운터를 추가하려면 다음을 수행하는 스크립트를 생성합니다.
이 섹션의 코드 예시는 프로파일러 카운터를 추가하여 Unity가 게임 오브젝트 트레일 효과의 모든 인스턴스에 대해 생성한 전체 파티클 수를 추적합니다. 이런 예시에서 게임 오브젝트의 이름은 “Tank”입니다.
새로운 카운터를 생성하려면 새로운 카운터 값의 타입을 정의하는 스크립트를 작성하고 이 타입에 이름과 단위를 할당합니다.
카운터를 생성할 때 반드시 새로운 카운터가 속하는 프로파일러 카테고리를 지정해야 합니다. 카테고리를 지정하기 위해 기존의 Unity 카테고리를 사용합니다. 예를 들어 아래의 스크립트 예시는 기존의 ProfilerCategory.Scripts
카테고리를 사용합니다. 자세한 내용은 프로파일러 카테고리 사용을 참조하십시오.
다음의 예시 스크립트는 “Tank Trail Particles”라는 이름으로 ProfilerCounterValue TankTrailParticleCount
를 정의합니다. 이 카운터에는 다음과 같이 “Count”의 단위가 있습니다.
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으로 초기화합니다.
Unity는 프로파일러 카운터를 카운터 프로파일 작업 타입(예: 렌더링, 스크립팅, 애니메이션)을 기준으로 하는 카테고리로 그룹을 짓습니다. 커스텀 프로파일러 카운터를 Unity의 어느 프로파일링 카테고리에나 할당할 수 있습니다. 사용 가능한 프로파일러 카테고리의 전체 리스트는 ProfilerCategory를 참조하십시오.
프로파일러 카운터는 반드시 프로파일러 카테고리에 속해야 합니다. 카테고리는 카운터를 정의할 때 프로파일러 카운터에 할당해야 합니다. 이렇게 할당하려면 ProfilerModule의 선택적 autoEnabledCategoryNames
생성자 인자를 사용하여 둘 이상의 카테고리를 프로파일러 카운터에 할당합니다. 다음의 예시 코드에 이 메서드에 대한 예시가 있습니다.
using Unity.Profiling;
using Unity.Profiling.Editor;
[System.Serializable]
[ProfilerModuleMetadata("Tank Effects")]
public class TankEffectsProfilerModule : ProfilerModule
{
static readonly ProfilerCounterDescriptor[] k_Counters = new ProfilerCounterDescriptor[]
{
new ProfilerCounterDescriptor(GameStatistics.TankTrailParticleCountName, GameStatistics.TanksCategory),
new ProfilerCounterDescriptor(GameStatistics.ShellExplosionParticleCountName, GameStatistics.TanksCategory),
new ProfilerCounterDescriptor(GameStatistics.TankExplosionParticleCountName, GameStatistics.TanksCategory),
};
// Ensure that both ProfilerCategory.Scripts and ProfilerCategory.Memory categories are enabled when our module is active.
static readonly string[] k_AutoEnabledCategoryNames = new string[]
{
ProfilerCategory.Scripts.Name,
ProfilerCategory.Memory.Name
};
// Pass the auto-enabled category names to the base constructor.
public TankEffectsProfilerModule() : base(k_Counters, autoEnabledCategoryNames: k_AutoEnabledCategoryNames) { }
}
카운터 값을 업데이트하려면 정의한 카운터 값을 설정하는 MonoBehaviour 스크립트를 생성합니다. 자세한 내용은 카운터 값을 프로파일러에 전달하는 방법을 참조하십시오.
이 예시 MonoBehaviour 스크립트는 업데이트 함수의 모든 프레임마다 할당된 게임 오브젝트에 속하는 트레일 파티클의 수를 계산합니다. 이 계산을 수행하려면 TankTrailParticleCount
라는 카운터를 사용합니다.
다음 예시 스크립트는 또한 인스펙터에 있는 Trail Particle System (m_TrailParticleSystem
)이라는 공용 프로퍼티를 생성합니다.
using UnityEngine;
class TankMovement : MonoBehaviour
{
public ParticleSystem m_TrailParticleSystem;
void Update()
{
GameStats.TankTrailParticleCount.Value += m_TrailParticleSystem.particleCount;
}
}
릴리스 플레이어에서 프로젝트를 실행하면 프로파일러 창에 액세스할 수 없습니다. 하지만 카운터를 릴리스 플레이어에서 UI 요소로 표시할 수 있습니다. 즉 릴리스된 애플리케이션에 프로파일링 툴을 포함시킬 수 있습니다. 이렇게 하려면 프로파일러 카운터 API 가이드에 있는 Getting counter values in players를 참조하십시오.
다음은 릴리스 플레이어에 있는 커스텀 UI를 사용하여 씬의 왼쪽 상단에 카운터를 표시한 이미지입니다.
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.
방문하는 모든 웹사이트의 정보가 브라우저에서 쿠키 형태로 저장되거나 수집될 수 있습니다. 본 정보는 귀하와 귀하의 선호도, 기기에 대한 것이며, 귀하의 선호도에 따라 사이트가 동작하도록 하는 데 사용됩니다. 본 정보는 귀하를 직접적으로 식별하지 않으나 보다 개인화된 웹 경험을 제공하기 위해 사용됩니다. 그러나 일부 쿠키를 거부할 수 있습니다. 더 자세한 정보를 확인하고 기본 설정을 변경하려면 해당 카테고리의 제목을 클릭하세요. 그러나 일부 쿠키를 차단하면 귀하의 사이트 경험과 회사에서 제공하는 서비스에 영향을 미칠 수 있습니다.
추가 정보
본 쿠키는 동영상 및 실시간 채팅과 같은 고급 기능과 개인화를 허용합니다. 쿠키는 회사 또는 회사 페이지에 추가된 제3 서비스 사업자가 설정할 수 있습니다. 쿠키를 허용하지 않으면 일부 기능이 정상 작동하지 않을 수 있습니다.
이 쿠키는 방문자 수, 데이터 트래픽 정보를 확인해 회사 사이트의 성능을 측정하고 개선할 수 있도록 합니다. 또한 가장 인기가 많거나 인기가 적은 페이지를 확인하며 방문자가 사이트를 이동하는 방법을 확인할 수 있도록 합니다. 쿠키가 수집하는 모든 정보는 누적되며 익명 처리됩니다. 쿠키를 허용하지 않으면 귀하가 회사 사이트에 방문한 시기를 알 수 없습니다.
이 쿠키는 회사의 광고 협력사가 회사 사이트에 설정한 것입니다. 해당 협력사는 귀하의 관심사에 대한 프로파일을 만들고 다른 사이트에서도 관련 광고를 표시하기 위해 이 쿠키를 사용합니다. 이 쿠키는 귀하의 브라우저와 기기를 식별함으로써 동작합니다. 이 쿠키를 허용하지 않으면 다른 웹사이트에서 회사가 제공하는 맞춤형 광고를 경험할 수 없습니다.
이 쿠키는 웹사이트의 기능을 위해 필수적이며, 회사 시스템 내에서 종료할 수 없습니다. 이 쿠키는 개인정보 선호도, 로그인 또는 양식 작성과 같은 서비스 요청에 해당하는 귀하의 행위에 따라서만 주로 설정됩니다. 귀하의 브라우저에서 이 쿠키를 차단하거나 쿠키에 대해 알림 설정을 할 수 있지만, 이 경우 해당 사이트의 일부 기능이 동작하지 않을 수 있습니다.