반응형

섹션 4 : 에셋 번들 빌드하기

이제 섹션 2에서 에셋 번들을 빌드하기 위한 코드 샘플을 살펴보자. BuildPipeline.BuildAssetBundles 함수에 세 개의 인수를 전달한다. 이 것에 대해서 좀 더 자세히 살펴보자.


"Assets/AssetBundles" - 빌드된 에셋 번들이 들어갈 디렉토리이다. 디렉토리의 위치를 원하는 곳으로 변경할 수 있다. 빌드를 시도하기 전에 폴더가 실제로 존재하는지 확인해야 한다.


BuildAssetBundleOptions

다양한 효과가 있는 여러가지 다른 에셋 번들 빌드 옵션을 지정할 수 있다. 여기서 모든 옵션에 대한 테이블을 확인할 수 있다 :

https://docs.unity3d.com/ScriptReference/BuildAssetBundleOptions.html


필요에 따라 BuildAssetBundleOptions을 자유롭게 조합할 수 있지만, 에셋 번들 압축을 처리하는 세 가지 BuildAssetBundleOptions가 있다.


- BuildAssetBundleOptions.None

- BuildAssetBundleOptions.UncompressedAssetBundle

- BuildAssetBundleOptions.ChunkBasedCompression


BuildAssetBundleOptions.None 이 번들 옵션은 직렬화된 데이터 파일의 단일 압축 LZMA 스트림인 LZMA 포멧 압축을 사용한다. LZMA 압축을 사용하려면 전체 번들이 사용되기 전에 압축이 풀려있어야 한다. 압축 결과 파일의 용량이 가장 작지만 압축 해제로 인한 로딩 시간이 길어진다. 이 옵션을 사용했을 때 번들의 에셋을 사용하려면 초기에 전체 번들의 압축을 풀어두어야 한다.


일단 한번 번들이 압축 해제되면, 번들에서 에셋을 사용하기 전에 전체 번들을 압축 헤제할 필요가 없는 LZ4 압축을 사용해서 디스크에서 재압축된다. 이 옵션은 번들이 하나의 에셋을 사용하기 위해 모든 에셋을 로딩해야하는 에셋이 포함된 경우에 사용하면 가장 적합하다. 캐릭터나 씬의 모든 에셋을 패키징하는 것이 이 옵션을 사용하는 번들의 예시이다.


LZMA 압축을 사용하는 것은 파일 크기가 작아서 오프 사이트 호스트에서 에셋 번들을 처음 다운로드하는 경우에만 권장한다. 파일을 다운로드하면 LZ4 압축 번들로 캐시된다.


BuildAssetBundleOptions.UncompressedAssetBundle 이 옵션은 전혀 압축되지 않은 방식으로 번들을 만든다. 그렇기 때문에 파일의 다운로드 용량이 커진다. 하지만 한번 다운로드한 이후에는 로딩 시간이 훨씬 빨라진다.


BuildAssetBundleOptions.ChunkBasedCompression 는 LZ4로 알려진 압축 방법을 사용하기 때문에 LZMA보다 압축 파일의 용량이 커지지만 LZMA와는 달리 전체 번들의 압축이 해제되지 않아도 사용할 수 있다. LZ4는 에셋 번들을 조각 또는 "청크"로 로드할 수 있는 청크 기반 알고리즘을 사용한다. 단일 청크의 압축을 풀면 에셋 번들의 다른 청크가 압축 해제 되지 않아도 포함된 에셋을 사용할 수 있다.


ChunkBasedCompression을 사용하면 압축되지 않은 번들에 로딩 시간을 비교할 수 있으므로 디스크 크기가 줄어든다.


BuildTarget

BuildTarget.Standalone - 여기서는 이 에셋 번들을 사용하는 대상 플랫폼을 빌드 파이프 라인에 알려준다. 사용가능한 빌드 대상 목록은 다음 링크에서 확인할 수 있다 :
https://docs.unity3d.com/ScriptReference/BuildTarget.html


그러나 빌드 타겟에 대한 하드 코딩을 하지 않으려면 "EditorUserBuildSettings.activeBuildTarget"을 자유롭게 이용하면 된다. 그렇게 하면 현재 설정중인 플랫폼을 자동으로 찾고 해당 타겟을 기반으로 에셋 번들을 빌드할 수 있다.


빌드 스크립트를 올바르게 설정했다면 번들을 빌드해야한다. 위의 스크립트 예제를 따라한 경우에는 Asset >> Asset Bundles Build를 클릭하여 프로세스를 시작하면 된다.


에셋 번들을 성공적으로 빌드했다면 AssetBundles 디렉토리에 예상보다 많은 파일이 있음을 알 수 있다. 설정한 번들의 수보다 2 * (n + 1)개 더 많은 파일이 있을 것인데, BuildPipeline.BuildAssetBundles의 결과물을 정확히 살펴보자.


유니티 에디터에서 지정한 모든 번들에 대해 에셋 번들 이름의 파일과 에셋 번들 이름 + ".manifest" 파일이 있을 것이다.


생성한 모든 에셋 번들과 이름을 공유하지 않는 추가 번들 및 매니페스트가 있다. 이것들은 (에셋 번들이 내장된 경우) 위치하고 잇는 디렉토리의 이름을 따서 이름이 지어진다. 이것이 매니페스트 번들이다. 이것들에 대해서 더 자세히 이야기할 것이다.


에셋 번들 파일

이 파일은 ".manifest" 확장자가 없는 파일이며 실행시에 에셋을 로드하기 위해 불러와야할 파일이다.


에셋 번들 파일은 내부적으로 여러 파일을 포함하는 아카이브이다. 이 아카이브의 구조는 일반 에셋 번들인지 씬 에셋 번들인지에 따라 약간 변경될 수 있다. 이것이 일반 에셋 번들의 구조이다.


씬 에셋 번들은 일반 에셋 번들에서 씬의 스트림 로딩과 컨텐츠에 최적화되도록 변경된 콘텐츠이다. 아래 이미지는 씬 에셋 번들의 내부 구조를 보여준다.


매니페스트 파일

추가 매니페스트 번들을 포함하여 생성된 모든 번들에 대해 연관된 매니페스트 파일이 생성된다. 매니페스트 파일은 텍스트 편집기로 열 수 잇으며 CRC(Cyclic Redundancy Check) 데이터 및 번들에 대한 종속성 데이터와 같은 정보를 포함한다. 일반 에셋 번들의 매니페스트 파일은 다음과 같은 내용이다 :


ManifestFileVersion: 0
CRC: 2422268106
Hashes:
 AssetFileHash:
   serializedVersion: 2
   Hash: 8b6db55a2344f068cf8a9be0a662ba15
 TypeTreeHash:
   serializedVersion: 2
   Hash: 37ad974993dbaa77485dd2a0c38f347a
HashAppended: 0
ClassTypes:
- Class: 91
 Script: {instanceID: 0}
Assets:
 Asset_0: Assets/Mecanim/StateMachine.controller
Dependencies: {}


여기에는 포함된 에셋, 종속성 및 기타 정보가 표시된다.


생성된 매니페스트 번들에는 메니페스트가 있지만 다음과 같이 보일 것이다.


ManifestFileVersion: 0
AssetBundleManifest:
 AssetBundleInfos:
   Info_0:
     Name: scene1assetbundle
     Dependencies: {}


여기에는 에셋 번들의 관계 및 종속성에 대한 정보가 표시된다. 지금 당장은 이 번들에 AssetBundleManifest 객체가 들어있다고만 이해하면 된다. 이 객체는 런타임에 불러올 번들의 종속성을 파악하는데 매우 유용하다. 이 번들과 매니페스트 객체를 사용하는 법은 섹션 6에서 확인할 수 있다.

반응형

+ Recent posts