레이블이 최적화인 게시물을 표시합니다. 모든 게시물 표시
레이블이 최적화인 게시물을 표시합니다. 모든 게시물 표시

2019년 7월 19일 금요일

Unity 2D 게임 최적화

간단하게 할 수 있는 최적화 항목을 정리해 둔다.


Application.targetFrameRate 
- 특정 프레임 레이트로 렌더린 하도록 설정
- 모바일에서는 30이 기본으로 설정되어 있음 이를 60으로 설정
- Application.targetFrameRate = 60;


QualitySettings.vSyncCount
- 화면 갱신율의 절반으로 프레임률을 제한할 때 사용
- 수직 동기화를 할 경우 1로 설정
- QualitySettings.vSyncCount = 1;
- Edit > Project Setting > Quality > Other 에서 설정


글로벌 일루미네이션 설정
- lighting을 제어하는 게임이 아닌 경우 관련된 설정을 모두 Off
- https://docs.unity3d.com/kr/530/Manual/GlobalIllumination.html
- Precomputed Realtime GI, Based GI, Fog 을 모두 Off 설정


Quality Setting 
- Edit > Project Setting > Quality 에서 설정
- Simple(또는 default) 보다 높은 프로필은 모두 체크 해제
- Pixel Light Count 는 0으로 설정
 (포워드 렌더링 시 픽셀 광원의 최대 수로 2D에선 사용 않함)
Texture Quality 를 가능한 낮은 설정으로
 (모바일에서 Half Res 설정에도 큰 차이 없이 75%나 메모리를 절약)
- Anisotropic Textures 는  해제
 (설정 시 물체가 카메라의 시선에 빗각(Oblique Angle)을 이루면서
  비스듬히 보이는 경우 뭉개지는 현상의 보완 : 3D에서 발생 조건)
 (설정 시 Forced On을 쓰기를 권장하며 성능을 많이 잡아먹지는 않음)
- Anti Aliasing 사용 안함 또는 2X
- Soft Particle 해제
 (파티클을 사용하는 이펙트들이 오브젝트와 겹치는 경계를 부드럽게 바꿔주는 기능)


오브젝트 풀링 사용
- 실시간으로 많이 생성되고 파괴되는 오브젝트는 반드시 풀링으로 관리가 필요.
 (초반에 미리 생성해 메모리를 점유하고, 게임 중 더이상 생성하지 않도록 구현)
- 풀링은 게임 플레이 중 GC의 발생을 방지하기 위함
- GC는 프로그램이 메모리를 추가로 요구할 때 발생 됨.


string 사용 자제
- string msg = "aaa" + "bbb"; 의 경우 3개의 string이 메모리에 할당됨.
- 가능한 string.format()을 사용
- string msg = string.format("A is {0} and B is {1}, {0} - {1} is {2}", A, B, A - B);
 ( 사용법 : 참고1, 참고2 )


Debug.Log 삭제
- 가능하면 사용하지 않도록 처리, string과 조합시 더욱 많은 메모리 점유가 발생 됨
- define 으로 사용 유/무를 플래그해서 호출 자체가 안되도록 설정


스프라이트 아틀라스
- 2배수의 정사각형 메모리에 적재되는 이미지의 여백을 최소환
- 동시에 사용하는 이미지 묶어 호출 횟수를 최소화 시킴

스프라이트 패커(Sprite Packer)
- Window>2D>Sprite Packer 를 이용
- 아틀라스로 만들 개별 sprite의 Inspector에 Sprite Mode>PackingTag를 설정
- Sprite Packer에서 [Pack] 버튼으로 아틀라스 생성
- 설정 방법 참고 : 링크, 링크2







2019년 7월 18일 목요일

Unity Sound 설정

모바일 게임을 제작하다 보면, PC-에디터에서는 잘 나오던 게임 사운드가 핸드폰에서는 밀려 나오는 경우를 종종 겪을 수 있다.

이런 상황을 해결하기 위한 설정값을 기록해 둔다.
출처 : https://docs.unity3d.com/kr/current/Manual/class-AudioClip.html

프로젝트 세팅

Edit > Project Settings > Audio에서 DSP Buffer SizeBest latency로 설정
- Best Performance : 성능이 우선 되어 출력 시 지연이 발생할 수 있음
- Best latency : 지연이 발생하지 않는 것을 우선시하여 출력 품질이 저하될 수 있음


리소스 타입별 세팅

배경음 1
- Force To Mono : 언 체크(퀄리티에 따라 가변)
- Load In Background : 체크
- Load Type : Streaming
- Preload Audio Data : 언 체크
- Compression Format : Vobis (100%)

배경음 2
- Force To Mono : 언 체크(퀄리티에 따라 가변)
- Load In Background : 체크
- Load Type : Compressed In Memory
- Preload Audio Data : 언 체크
- Compression Format : Vobis (70%)

효과음 : 작은 크기의 빈번한 출력 
- Force To Mono : 체크
- Load In Background : 언 체크
- Load Type : Decompress On Load
- Preload Audio Data : 체크
- Compression Format :  PCM

긴 효과음(보이스) : 중간 크기의 빈번한 출력
- Force To Mono : 체크
- Load In Background : 언 체크
- Load Type : Compressed In Memory
- Preload Audio Data : 체크
- Compression Format :  ADPCM

작은 크기의 가끔 발생하는 Sound
- Force To Mono : 체크
- Load In Background : 언 체크
- Load Type : Compressed In Memory
- Preload Audio Data : 언 체크
- Compression Format :  ADPCM

중간 크기의 가끔 발생하는 Sound
- Force To Mono : 체크
- Load In Background : 언체크
- Load Type : Compressed In Memory
- Preload Audio Data : 언 체크
- Compression Format :  Vobis (70%)


개별 리소스 세팅 정보

Force To Mono(모노 강제조정)
- 스테레오를 모노로 강제 조정
- 모바일이고 최적화를 중시할 경우 설정(체크) 함

Load In Background(지연된 로딩)
- 체크 시 출력 타이밍을 엄격히 지키지 않고, 느긋하게 백그라운드에서 로드
- 따라서 배경음악일 경우 사용 FX 사운드의 경우 체크 해제


Load Type
- Decompress On Load
 실행과 동시에 압축을 해제
 작은 사이즈의 FX 사운드에 유용
 많은 메모리 점유 CPU는 적게 사용

- Compressed In Memory
 메모리에 압축 상태로 저장, 실행 시 압축을 해제하여 재생
 약간의 성능상 오버헤드를 발생시킴
 보이스 사운드 등에 사용

- Streaming
 저장소에 위치한 오디오를 실시간으로 읽어냄.
 보통 배경음악에서 사용


Preload Audio Data
- 씬이 로딩될 때 씬에서 사용하는 모든 오디오 클립을 미리 로드
- 언체크시 플레이시 로드 하기에 랙 발생 됨


Compression Format
- PCM
 최고품질 / 용량 큼 / 작은 파일 크기에 적합 / FX 사운드
 Load Type은 Decompress On Load로 하자
 즉시 재생해야 하는 매우 짧은 효과음

- ADPCM
 중간 품질 / 용량 중간
 PCM대비 3.5배의 압축비, 노이즈가 포함됨
 총격 소리와 같이 무압축에 가까운 품질 까지는 필요없지만,
 지연시간 없이 자주 반복 재생 되야 하는 경우 적절

- Vobis
 최저품질 / 용량 적음 / 배경음에 적합
 압축률 설정이 가능(보통 70%로 설정)
 지연 재생 되어도 무방한 일반적인 배경음


Unity - Firebase 연동 (Analytics, AdMob)

버전 : firebase_unity_sdk_6.5.0.zip 게임에서 통계 측정 및 광고 추적을 위해 Firebase 을 연동한다. 앞서 [Unity - GPGS 와 Admob 연동 및 배포 준비 작업]  연동 이후에 작업을 진행 한다. 유니...