모바일 게임 성능 최적화: 물리, UI, 오디오 설정에 대한 전문가 팁 이 글에 대한 요약입니다.
설정 최적화
1. layerSettings에서 Prebake Collision Meshes를 선택
2. 물리 설정(Project Settings > Physics)을 편집하여 Layer Collision Matrix를 단순화
3. (Project Settings > Physics)의 Auto Sync Transforms를 비활성화하고 Reuse Collision Callbacks를 활성화
콜라이더 단순화
복잡한 메시 콜라이더를 기본 또는 단순화된 메시 콜라이더로 대체하여 원래 모양을 대략적으로 표현
Sphere Collider, Capsule Collider, Box Collider 순으로 연산 속도가 빠르다고 하니,
가능한 Sphere Collider를 활용하자.
물리 메서드를 사용하여 이동 구현
MovePosition 또는 AddForce와 같은 메서드를 사용하여 Rididbody컴포넌트가 부착된 오브젝트를 이동시킨다.
위 메서드는 Update 대신 FixedUpdate에서 사용한다.
Transform 컴포넌트를 이용하여 초당 움직임을 변화시켜 이동을 구현하는 것(translate 등 이용)은
유니티의 물리 월드에서 다시 계산하게 되어 리소스를 더 많이 소모한다.
Fixed Timestep 고정
(Project Settings > Time > Fixed Timestep)을 프레임 속도와 일치하도록 변경한다.
Fixed Timestep의 기본값은 0.02(50Hz)이다. 30fps는 0.03
(Project Settings > Time > Maximum Allowed Timestep)을 낮추어 성능 문제가 발생할 때
물리 및 애니메이션이 느려지도록 해서 프레임 속도에 미치는 영향을 줄일 수 있다.
Physics Debugger를 통한 시각화
Physics Debug 창(Windows > Analysis > Physics Debugger)을 활용하여
콜라이더 불일치로 인한 문제를 해결할 수 있다.
UI 관련
정적 UI 요소는 별도의 Canvas에 두고, 동시에 업데이트되는 동적 요소는 보다 작은 하위 Canvas에 위치시킨다.
각 Canvas 내의 모든 UI 요소가 동일한 Z 값, 머티리얼, 텍스처를 갖도록 한다.
보이지 않는 UI 요소는 비활성화하여 숨긴다.
(화면에 보이지 않도록 위치시키는 것보다 그냥 오브젝트를 비활성화)
GraphicRaycaster 컴포넌트는 화면 터치 등의 입력 이벤트가 필요한 오브젝트에만 부착하고,
마찬가지로 Image 컴포넌트의 프로퍼티중 Raycast Target은 이미지를 클릭할 필요가 없다면 비활성화한다.
Layout Group은 정말 필요할 때만 사용한다.
(비율 레이아웃에 대한 앵커를 대신 사용 또는 UI 설정을 마친 후
커스텀 코드를 사용하여 Layout Group 컴포넌트를 비활성화)
대형 리스트 뷰와 그리드 뷰를 만들 때는 소규모 요소의 풀을 재사용한다. 샘플 참고
다수의 UI 요소를 레이어링하지 않기(쌓여있는 카드)
일시 중지 화면이나 시작 화면이 전체화면으로 카메라가 필요없는 경우는
3D씬을 렌더링하는 카메라를 비활성화한다.
전체화면 UI 사용 시에는 Applcation.targetFrameRate를 낮게 설정한다.
Canvas 컴포넌트에서 Event Camera나 Render Camera 필드를 공백으로 두면
자동으로 채워넣어 불필요한 리소스가 소모되므로 미리 채운다.
가능한 RenderMode에 카메라가 필요 없는 Screen Space - Overlay를 사용하는 것이 좋다.
오디오 관련
오디오는 일반적인 성능 저하 원인은 아니지만 메모리를 절약할 수 있다.
압축되지 않은 원본 WAV 파일을 소스 에셋으로 사용한다.
압축된 형식(예: MP3 또는 Vorbis)을 사용하는 경우
Unity에서 압축을 푼 뒤 빌드 시간 동안 재압축하여 손실이 두 번 발생, 최종 품질이 저하된다.
클립을 압축하고 압축 비트레이트를 낮춘다.
대부분의 사운드에 Vorbis(반복 재생 목적이 아닌 경우에는 MP3)를 사용
자주 사용하는 짧은 소리(예: 발자국 소리, 총소리)에 ADPCM을 사용, 재생 중 디코딩이 빠름
모바일 기기에서의 음향 효과는 최대 22,050Hz
작은 클립(< 200kb)은 로드 시 압축 해제로 체크 설정
중간 클립(>= 200kb)은 메모리에서 압축된 상태로 설정
대용량 파일(배경 음악) 은 스트리밍으로 설정
메모리에서 음소거된 AudioSource는 컴포넌트를 삭제하여 언로드한다.
'유니티 개발 기술 > 성능 최적화' 카테고리의 다른 글
프로파일링, 메모리, 코드 아키텍처 관련 최적 팁(유니티 공식 블로그 글 요약) (0) | 2023.10.16 |
---|---|
Spikes in Garbage Collection (0) | 2023.08.01 |
구조체를 쓸까, 클래스를 쓸까(feat. Reduce the Heap usage) (0) | 2023.08.01 |
QualitySettings 클래스의 다양한 함수와 속성 (0) | 2023.07.25 |
GPU Instancing(GPU 인스턴싱) (0) | 2023.07.23 |