unity 스터디를 하며 공부한 내용을 기록하기 위한 게시글 입니다. 오타 또는 오류가 있을 수 있습니다
1. 성능 저하 유형
-
GC 스파이크
가비지 콜렉터 발생 시 갑작스런 프레임 드랍 현상.
메모리에 불필요한 entity를 제거할 때 발생하므로, 런타임동안 가비지를 적게 생성하도록 해야함.
-
긴 로딩 시간
사용자 경험에 부정적인 영향을 미치므로 로딩 화면의 길이를 줄여야 함.
또 로딩 타임에 메모리 사용량이 몰리는 경우가 있는데, 이 경우 크래시 발생 확률이 높음.
에셋을 미리 로드하거나 로드하는 씬의 복잡성을 줄여야 함.
-
메모리 사용량
메모리 부족 시 버벅임 유발, CPU 등 프로젝트 병목 현상의 주 원인
오브젝트 복잡성을 줄이거나 텍스처의 해상도를 줄임
오브젝트 풀링
중복 리소스 체크
2. Profiling
Unity Profiler
- 유니티 에디터 성능 분석 도구
- 다만 에디터에서의 프로파일링은 참고용이며, 최종적으로는 타겟 플랫폼에서의 프로파일링이 필하다.
- 실제 디바이스 환경보다 PC가 성능이 좋은 부분이 있기 때문에 CPU 점유율 정보도 다르다.
- x code Instruments 가 더 상세한 정보를 얻을 수 있다.
Unity Profiler 실행
[Window] - [Analysis] - [Profiler] (Standalone Process)
Profiler (Standalone Process)
2020.1 버전부터 추가된 기능으로, 유니티 프로파일러를 별도의 프로세스 형태로 띄울 수 있게 됨.
- 기존 프로파일러는 에디터 쪽의 부하가 함께 잡히는데, 이부분을 없앨 수 있다.
- 유니티 에디터를 실행하지 않고 프로파일러만 실행할 수 있다
프로파일링 이전 준비사항
- 빌드 옵션 Development Build , Autoconnect Profiler 활성화.
Deep Profiling Support
- 빌드 디바이스에 설치 (혹은 Build And Run)
- 유니티 실행 전 유니티 에디터와 앱 adb 터널링 만들기
adb forward tcp:34999 localabstract:Unity-{insert bundle identifier here}
- 유니티 에디터 - Profiler 실행 (혹은 Profiler (Standalone Process) 실행)
- 프로파일러 상단에서 AndroidPlayer 선택
- 앱 실행 시 데이터 기록
Unity Profiler 구성
-
프로파일러 모듈 : 프로파일링 할 수 있는 모듈의 리스트.
-
프로파일러 컨트롤 : 유니티 프로파일러와 연결할 기기 선택 및 프로파일링 간 프레임 이동, 데이터 기록
- 좌측 드롭다운 : 연결할 기기 목록 선택
- 기록 버튼 : 활성화 시 프로파일링 정보를 기록
- 앞/뒤 화살표 : 한프레임씩 앞/뒤로 이동 가능
- ⏭ : 현재 프레임으로 이동
- Frame 000 / 000 : 현재 보고있는 프레임 번호 / 전체 프로파일링 세션동안 수집된 프레임 수
- Deep Profilie : 모든 스크립트 코드가 프로파일링이 되어 세부적으로 시간을 확인할 수 있으나, 메모리도 많이 사용하기 때문에 단순한 스크립트가 아닌 이상 게임이 느려지게 된다. (대규모 게임에서는 사용X)
-
프레임 차트 : 프로파일링 정보를 차트로 확인
- 마지막 300 프레임의 이력이 표시된다. (최대 2,000개 까지 늘릴 수 있음)
-
모듈 세부 정보 창 : 모듈마다 필요한 상세 정보 표시
- Hierarchy 주로 사용하며, 데이터를 구조에 따라 그룹화 한다.
- Timeline 쓰레드의 상관관계를 시각적으로 표시한다. (어떤 Main Thread에서 어떤 Job Thread 로 이어지는지 한눈에 볼 수 있음)
- Raw Hierarchy 데이터를 그룹화 하지 않고 호출 스택과 유사한 계층 구조로 표시.