Unity 프로파일링 가이드
Unity에서 애플리케이션 성능을 최적화하기 위해 프로파일링은 필수적인 과정입니다. 이 문서에서는 성능 문제를 분석하는 방법과 주의할 사항을 설명합니다.
시작 트레이스 분석
애플리케이션의 시작 시간은 플랫폼마다 다르며, 이는 스플래시 화면이 나타나는 동안 시작됩니다. 시작 시간에 영향을 미치는 두 가지 주요 메서드는 다음과 같습니다:
메서드 | 설명 |
---|---|
UnityInitApplicationGraphics |
그래픽 설정 및 내부 시스템 초기화 수행. 리소스 시스템 초기화 포함. |
UnityLoadApplication |
첫 씬을 로드하고 초기화. 초기화 중 셰이더 컴파일링, 텍스처 업로드 등의 작업 수행. |
리소스 시스템은 프로젝트의 Assets
폴더 내 Resources
폴더의 모든 에셋 파일을 포함합니다. 이 폴더의 파일 개수에 따라 초기화 시간이 증가합니다.
런타임 트레이스 분석
런타임 동안 애플리케이션 성능을 검사할 때 PlayerLoop
메서드가 핵심입니다. 이는 Unity의 메인 루프이며 매 프레임마다 실행됩니다.
메서드 | 설명 |
---|---|
PlayerRender |
Unity의 렌더링 시스템을 실행하며, 이미지를 그리는 작업을 수행. |
BaseBehaviourManager |
씬의 모든 액티브 MonoBehaviour의 Update , LateUpdate , FixedUpdate 호출. |
UI::CanvasManager |
Unity UI의 레이아웃 업데이트 및 배치 계산. |
PhysicsManager::FixedUpdate |
물리 시스템 및 콜백 처리. |
이 외에도 Coroutine
, Input
, Animation
과 관련된 여러 메서드가 있습니다.
스크립트 메서드 분석
IL2CPP로 크로스 컴파일된 스크립트는 ScriptingInvocation
객체를 통해 추적할 수 있습니다. 하단에는 Unity가 실행하는 각 메서드가 나열됩니다. 일반적으로 Update
메서드가 대부분의 CPU 시간을 소모합니다. 예를 들어,
메서드 | 설명 |
---|---|
EventSystem.Update |
UI 이벤트 처리를 위한 방법. |
PlayerShooting.Update |
플레이어의 총알 발사를 처리. |
각 스크립트 메서드는 다른 스크립트 메서드 및 Unity API와 연결되어 있으며, CPU 시간 소모를 늘릴 수 있습니다.
에셋 로드
CPU 트레이스에서 에셋 로드는 다음 메서드로 확인할 수 있습니다:
메서드 | 설명 |
---|---|
SerializedFile::ReadObject |
파일의 바이너리 데이터를 Unity의 직렬화 시스템과 연결. |
Transfer |
에셋 종류에 따라 존재하는 호출 메서드. |
씬을 로드할 때 모든 에셋을 읽고 역직렬화합니다. 이때 SerializedFile::ReadObject
메서드를 통해 성능 저하가 발생할 수 있습니다.
주요 고려사항
- 성능 저하 해결: 에셋 로딩을 비동기화하거나 특정 에셋을 미리 로드하여 성능을 개선할 수 있습니다.
- Awake 콜백 최적화: 첫 씬의
Awake
메서드에서 느린 코드 제거 혹은 지연 실행. - 스케줄링 관리: CPU 시간을 소모하는 메서드 식별 후 최적화.
이 가이드를 통해 Unity 개발자는 프로파일링을 활용하여 성능 최적화의 기초를 다질 수 있습니다. 추가적인 정보나 기술 자료는 Unity의 공식 문서를 참조하세요.