특히 모바일 디바이스나 크기 제한이 있는 앱 스토어의 경우 빌드된 앱의 파일 크기를 최소한으로 유지하는 것이 중요합니다. 크기를 줄이는 첫 번째 단계는 어떤 에셋이 크기에 가장 큰 영향을 미치는지 파악하는 것인데, 이러한 에셋의 최적화 가능성이 가장 높기 때문입니다. 이 정보는 빌드를 완료한 직후에 에디터 로그에서 확인할 수 있습니다. 콘솔 창(메뉴: Window > General > Console)으로 이동한 다음, 오른쪽 상단의 작은 드롭다운 패널을 클릭하고 Open Editor Log 를 선택합니다.
에디터 로그는 유형별로 분류된 에셋의 요약을 제공한 다음 크기에 영향을 미치는 순서대로 모든 개별 에셋을 나열합니다. 일반적으로 텍스처, 사운드, 애니메이션 같은 요소는 대부분의 스토리지를 차지하며, 스크립트, 레벨, 셰이더는 일반적으로 영향을 가장 적게 미칩니다. 목록에 언급된 File headers 는 에셋이 아니며, 실제로는 레퍼런스와 설정을 저장하기 위해 ‘원시’ 에셋 파일에 추가되는 추가 데이터입니다. 헤더는 일반적으로 에셋 크기와는 거의 차이가 없지만 Resources 폴더에 많은 대형 에셋이 있는 경우 값이 커질 수 있습니다.
에디터 로그는 제거하거나 최적화할 수 있는 에셋을 식별하는 데 유용하지만, 시작하기 전에 다음 사항을 고려해야 합니다.
Unity는 임포트한 에셋을 자체 내부 포맷으로 다시 코딩하므로 소스 에셋 유형 선택은 관련이 없습니다. 예를 들어 프로젝트에 멀티 레이어 Photoshop 텍스처가 있는 경우 이는 빌드하기 전에 평면화되고 압축됩니다. 텍스처를 .png 파일로 익스포트해도 빌드 크기에 차이가 없으므로 개발 중에 가장 편리한 형식을 사용해야 합니다.
Unity는 빌드 중에 대부분의 미사용 에셋을 스트리핑하므로 프로젝트에서 에셋을 수동으로 제거해도 아무것도 얻지 못합니다. 제거되지 않는 유일한 에셋은 스크립트(일반적으로 매우 작음)와 Resources 폴더의 에셋입니다(Unity가 어떤 에셋이 필요한지 여부를 결정할 수 없기 때문). 따라서 Resources 폴더에 있는 에셋만 게임에 필요한 에셋인지 확인해야 합니다. Resources 폴더의 에셋을 에셋 번들로 대체할 수 있습니다. 즉 Unity가 에셋을 동적으로 로드하여 플레이어 크기를 줄일 수 있습니다.
일반적으로 텍스처는 빌드에서 가장 많은 공간을 차지합니다. 첫 번째 해결 방법은 압축된 텍스처 포맷을 사용하는 것입니다. 자세한 내용은 플랫폼별 텍스처 압축 기술 자료를 참조하십시오.
파일 크기가 충분히 줄어들지 않으면 텍스처 이미지의 물리적 크기(픽셀 단위)를 줄입니다. 실제 소스 콘텐츠를 수정하지 않고 이렇게 하려면 프로젝트 뷰에서 텍스처를 선택하고 인스펙터 창에서 Max Size 를 줄입니다. 게임 내에서 어떻게 보이는지 확인하려면 텍스처를 사용하는 게임 오브젝트를 확대한 다음 씬 뷰에서 화질이 떨어지는 것처럼 보일 때까지 Max Size 를 조정합니다. 최대 텍스처 크기를 변경해도 텍스처 에셋에는 영향이 없고 게임에서 표시되는 해상도에만 영향이 있습니다.
기본적으로 Unity는 임포트할 때 모든 텍스처를 압축합니다. 에디터에서 워크플로를 더 빠르게 하려면 Unity < Preferences 로 이동하여 Compress Assets on Import 체크박스를 선택 해제합니다. 모든 텍스처는 이 설정과 관계없이 빌드에서 압축됩니다.
게임 파일의 공간을 줄이도록 메시와 임포트된 애니메이션 클립을 압축할 수 있습니다. 메시 압축을 활성화하려면 메시를 선택한 다음 인스펙터 창에서 Mesh Compression 을 Low, Medium 또는 High 로 설정합니다. 메시 및 애니메이션 압축은 양자화를 사용합니다. 즉 공간을 덜 차지하지만 압축으로 인해 일부 부정확성이 발생할 수 있습니다. 모델에 적합한 압축 수준을 실험해 보십시오.
메시 압축은 더 작은 데이터 파일만 생성하며 런타임 시 메모리를 더 적게 사용하지 않습니다. 애니메이션 키프레임 감소는 더 작은 데이터 파일을 생성하고 런타임 시 메모리를 적게 사용합니다. 이는 일반적으로 항상 활성화되어 있어야 합니다. 이에 대한 자세한 내용은 애니메이션 클립 기술 자료를 참조하십시오.
Unity는 두 가지 .NET API 호환성 레벨인 .NET 4.x 및 .NET Standard 2.0을 지원합니다. .NET Standard 2.0은 .NET API를 더 작은 서브셋으로 제한하므로 크기를 줄일 수 있습니다.