Sugar

[Unity] Profiling

by Sugar0810
1월 17일 오후 4시 알쓸유잡 : 모바일📱최적화 2022LTS

 

Profiling 

 

한글화 문서 추천

 

 

PofilerMarker

의심이 가는 로직이 있는 코드 단위에서 묶어서 집중적으로 확인할 수 있는 클래스

 

실제 디바이스에서 프로파일링 하는 것을 강조

PlayMode에서 실제 디바이스를 찾아 확인할 수 있다.

 

Build Settings - Development Build

유니티 프로파일러 연결할 때 체크할 것

 

Build Settings - Autoconnect Profiler

빌드에서 띄우자마자 프로파일러에 연결하고 싶다면 해당 옵션 체

 

Build Settings - Deep Profiling Support

해당 옵션은 유저 스크립트의 함수 등을 깊게 볼 수 있는 내용이지만 프로파일러 오버헤드가 다른 프로파일러에 비해 커서 기본 값으로는 꺼져있다.

 

 

Unity Profilier Tool

Timeline

호출 순서, 비중, 프레임, 쓰레드들의 동기되는 모습 등 확인

 

 

 

Hierarchy

함수 호출 순서(콜스택)으로 볼 수 있고 수치적으로 정렬하여 파악할 수 있다. 

 

 

타임라인과 하이어라키는 볼 수 있는 요소가 다르기 때문에 같이 확인하는 것을 권장

 

 

Profile Analyzer

Package Manager에서 추가 다운로드

일반 프로파일러와 비교

+ 일반에선 하나 하나 클릭하며 기억해서 비교했지만 두 가지 요소를 끌어와 동시에 성능 비교가 가능하다.

+ 일반에선 한 프레임씩 찍어서 볼 수 있었지만 영역으로 확인 가능하다.

 

프로파일러에선 주로 ms로 표현하게 되는데 전반적인 게임 성능을 이야기할 땐 FPS를 자주 이야기한다. 따라서 FPS를 ms로 변환하는 공식은 1000을 나누어주는 값으로 보면 된다.

 

30FPS -> 30/1000 = 33.33333..ms

60FPS -> 60/1000 = 16.66666..ms

 

 

 

디바이스 온도(쓰로틀링)

모바일의 경우 디바이스 온도에 유의할 것(발열이 높을수록 디바이스 성능이 저하됨)

 

 

Memory Profiler

Package Manager에서 Import하여 사용 가능

기능 : 메모리 프로파일링 스냅샷을 시나리오, 디바이스 별로 비교 분석할 수 있다.

구체적인 사용법은 추후에 강의

 

 

 

GC 발생하지 않도록 권장하는 방법

 

 

 

 

 

 

 

 

동적 메모리 관리

PC의 경우 가용 메모리를 넘어서더라도 자동으로 드랍되지 않도록 유지할 수 있는 반면, 모바일 환경에선 가용 메모리가 없으므로 즉시 드랍된다. 따라서 OS, 백그라운드 메모리 등에 유의하며 개발해야한다.

 

C#에선 Automatic Memory Management(동적 메모리 관리)를 해주지만 중간 자원을 수동으로 관리하여 GC 최적화할 수 있다.

 

 

 

 

 

 

 

ETC

Camera.main

모든 카메라를 찾고 Find Tag 메서드 작업이 들어가는 등 비용이 큰 작업이여서 2020 LTS에서 해당 코드 사용을 지양했으나 2022 LTS에선 유니티 내부적으로 캐싱된 것을 돌려주는 방식으로 개선됐다.

 

GetComponent<T>()

비용 소모가 크므로 Start() 메서드에서 미리 저장해두고 꺼내 사용하는 방법을 권장

블로그의 정보

Sugar

Sugar0810

활동하기