티스토리 뷰

IT지식

유니티 최적화 하기 - 리소스

민자르 2018. 7. 22. 13:59
반응형

[물리엔진 최적화]


# Fixed Update 주기 조절


 - FixedUpdate()는 Update와 별도로 주기적으로 불리며, 주로 물리 엔진 처리

 - 디폴트는 0.02초, 즉 1초에 50번 호출합니다.

 - TimeManager에서 수정이 가능합니다.

 - 게임에 따라 0.2초 정도(혹은 이상)로 수정해도 문제 없습니다.


# 물리 엔진 설정


 - Static Object

   [1] 움직이지 않는 배경 물체는 Static으로 설정합니다.

 - 충돌체의 이동

   [1] 리지드 바디가 없는 고정 충돌체를 움직이면 CPU 부하가 발생합니다 - 물리 월드 재구성

   [2] 이럴 경우에 리지드 바디를 추가하고 IsKinematic 옵션을 사용.

 - Maximum Allowed timestep 조정

   [1] 시스템에 부하가 걸려 지정된 시간보다 오래 걸릴 경우, 물리 계산을 건너 뛰는 설정

 - Solver Iteration Count 조정

   [1] 물리 관련 계산을 얼마나 정교하게 할지를 지정합니다. (높을수록 정교함)

   [2] Edit -> Project Setting -> Physics

 - Sleep 조절

   [1] 리지드바디의 속력이 설정된 값보다 작을 경우 휴면 상태에 들어갑니다.

   [2] Physics.Sleep() 함수를 이용하면 강제 휴면 상태를 만들 수 있습니다.


# 2D 물리 vs 3D 물리


 - 2D 게임에는 2D 물리를 (RigidBody2D), 3D 게임에는 3D 물리를(RigidBody)


# 물리 엔진 스크립트


 - 래그돌 사용을 최소화합니다.

   [1] 랙돌은 물리 시뮬레이션 루프의 영역이 아니기 때문에 꼭 필요할 때만 활성화합니다.

 - 태그 대신 레이어 사용

   [1] 물리 처리에서 레이어가 훨씬 유리합니다. 성능과 메모리에서 장점을 가집니다.

 - 메쉬 콜라이더는 절대 사용하지 않는다.

 - 레이캐스트와 Sphere Check 같은 충돌 감지 요소를 최소화합니다.


# Tilemap Collision Mesh


 - 2D 게임에서 타일 맵의 Collision Mesh를 최적화하라

   [1] Tilemap을 디폴트로 사용해서 각 타일별로 충돌 메쉬가 있는 경우 물리 부하가 커집니다.

   [2] 연결된 Tilemap을 하나의 Collision Mesh로 물리 연산을 최적화 합니다.



[리소스 관련]


# 오디오 파일은 .wav 형식으로 저장


- 오디오 파일은 용량을 줄이려고 굳이 .mp3 형식으로 임포트 할 필요가 없습니다. 유니티 자체 인코더가 용량을 원하는대로 압축해주기 때문입니다.

- 모바일에서 스테레오는 의미가 없습니다. 그러니 모두 92kb 모노로 인코딩하는 것이 좋습니다. 92kb 모노 인코딩은 유니티 엔진에서 간편하게 설정할 수 있습니다.

- 사운드 파일을 임포트하면 디폴트 값으로 3d 사운드가 설정됩니다. 이를 2d 사운드로 서러정 변경하는 것도 리소스 낭비를 줄이는데 도움이 됩니다.


# 이미지 압축


- 게임에 사용하는 이미지는 가로 세로 사이즈가 무조건 2에 제곱승

- 1024x1024x32bit RGBA 기준으로 이미지를 압축한 png 용량이 300kb 정도 불과하더라도 압축을 해제하면 메모리상 이미지 사이즈는 4MB나 된다.


# 디바이스별로 권장하는 압축 텍스쳐 포맷


- WEBGL : DXT

- 아이폰(powerVR) : PVRCT

- 안드로이드(Tegra) : DXT

- 안드로이드(Adreno) : ATC

- 안드로이드(공통) : ETC!

728x90
반응형
댓글