본문 바로가기

Game/Unity

[unity3d] 파일사이즈 줄이기 (Reducing File Size)

아래 내용을 간단히 요약하면,

  • 리소스는 Unity 가 알아서 필요한 것들만 빌드에 포함시켜 주니까 편하게 작업해라.
  • 사용된 파일 정보들은 Log 를 통해서 살펴 볼 수 있다.
  • 텍스쳐, 메쉬, 애니메이션 크기를 줄여라 셋팅을 통해서도 할 수 있다.
  • System.dll, System.Xml.dll 을 되도록이면 사용하지 말아야 용량 늘어 난다.
  • Xml  파일을 파싱하고 싶으면 다른 간단한 라이브러리를 사용해라.

 

 

원문 : http://docs.unity3d.com/Documentation/Manual/ReducingFilesize.html

Unity는 모든 Import된 asset들은 후처리(post-process)

Unity는 모든 import 된 파일들을 후처리한다. 그러므로 jpg 대신, multi-layer 인 psd 파일로 저장하는 것이 배포하게 될 버전에 파일크기에 전혀 영향을 주지 않는다. 작업하던 파일 포맷(.mb, .psd, .tiff 등) 으로 저장하는 것이 아주 편하게 될 것이다.

Unity는 사용하지 않는 asset 은 제거

Project 폴더에 포함되어 있는 전체 asset 용량은 빌드 된 버전의 용량에 전혀 영향을 주지 않는다.  Unity 는 asset들이 게임에 사용되고 있는지 아닌지를 감지한다. unity는 게임을 빌드하기 전에 모든 asset들의 참조를 따라가 보고, 게임에 포함되어 필요한 asset 들의 목록을 생성한다. 그러므로, Project 폴더에 사용하지 않는 asset들을 둬도 무방하다.

Unity는 사용된 파일크기들의 정보를 살펴 볼 수 있다.

Unity는 게임을 빌드한 후에, asset 종류별로 최대 파일 크기가 어떤지 출력하고, 빌드에 어떤 asset들이 포함되어 있는지 출력한다.  Editor Log 를 열어 보면 알 수 있다.

파일 헤더들은 asset이 아니지만, asset 을 위한 참조와 setting 정보를 관리하는 데이터를 나타낸다. 즉,  파일 내에 있는 본 컨텐츠 데이터와는 다른 추가 데이터 인 것이다. 이 것들은 정상적으로는 작은 부분을 차지해야 하지만, 값이 크다면, resource 폴더에 asset 들이 정말 많은지 검사해봐야 한다.  만일 그렇다면, 일부 asset 파일들을 다른 폴더에 옮겨야 할 수 도 있다. asset 들을 dynamically 로드할 수 있도록 AssetBundles 를 사용하게 바꿀 수도 있어야 한다.

텍스쳐 크기 최적화

 

빌드의 대부분의 공간을 텍스쳐들이 차지한다.  여기서 첫번째로 해야 하는 것은 가능한 압축된 텍스쳐 포맷(PVRTC, DXT(desktop platforms)을 사용하는 것이다.

용량크기를 줄일 수 없다면,  텍스쳐 크기를 줄이도록 노력해야 한다. 한가지 알려 줄 수 있는 트릭으로 실체 텍스쳐 크기를 줄이지 않아도 되는 방법이 있다. 간단하게 project view 에서 텍스쳐를 선택하고, Import Settings 에서 Max Size를 설정하는 것이다.

텍스쳐가 차지하는 메모리 용량

원문 참조

메쉬와 애니메이션 크기 최적화

메쉬들과 import 된 애니메이션 클립들은 압축될 수 있고 그래서 적은 용량을 차지하게 된다. 압축은 Mesh Import Settings 에서 설정할 수 있다.

메쉬와 애니메이션 압축은 적은 공간을  차지한다는 의미인 양자화(quantization)을 사용한다.  하지만, 압축은 부정확할 수 있다. 압축레벨을 어느 정도 해야 적당한지 경험적으로 판단해야 할 것이다.

메쉬 압축은 오로지 데이터 파일 크기만 작아질 뿐이지 실행시 적은 메모리를 사용하는 것은 아니라는 것을 알아야 한다. 애니메이션 키프레임 감소는 적은 데이터를 만들어 내고 실행시 적은 메모리를 사용한다. 그리고 일반적으로 항상 키프레임감소를 사용해야 한다.

빌드(게임, the Players)에 포함된 dll 들 감소해야 한다.

빌드를 생성할 때, System.dll이나 System.Xml.dll 에 의존하지 않게 하는 것이 중요하다. Unity 는 System.dll이나 System.Xml.dll 을 포함하지 않는다. 그것은 만약 Xml 이나 System.dll에 존재하는 Generic container 를 사용하고 싶다면, 이러한 dll 들이 빌드에 포함되어져야 한다는 것을 의미한다. 이 것은 일반적으로 1 mb 정도 추가가 된다. 명백히, 이 것은 좋지 않은 것이고 피해야 하는 것이다. Xml 파일을 파싱해야 할 필요가 있다면, Mono.Xml.zip 과 같은 아주 작은 Xml 라이브러리를 사용할 수 있다. 반면, 대부분의 Generic container 들은 mscorlib 에 포함되어 있다. Stack<>과 몇개는 System.dll 에 있다. 그러므로 진심으로 그런 것들을 피하기를 바란다.


출처 : http://smilemugi.net/wordpress/archives/238

'Game > Unity' 카테고리의 다른 글

prime31 In App Billing plugin 설명  (6) 2015.01.29
Unity Analytics 적용해보기  (0) 2015.01.27
[unity3d] homing  (0) 2015.01.07
[Unity3D]Circle  (0) 2014.12.01
[Unity3D]Physics.OverlapSphere 예제  (0) 2014.11.26