Version: 2022.3
언어: 한국어
에셋 번들을 위한 에셋 준비
에셋 번들 종속성

에셋 번들 빌드

Note: This section describes the creation of AssetBundles using the built-in BuildPipeline.BuildAssetBundles() API. A recommended, and more user friendly, alternative is to use the Addressables package.

In the documentation on the AssetBundle Workflow, we have a code sample which passes three arguments to the BuildPipeline.BuildAssetBundles function. Let’s dive a little deeper into what we’re actually saying.

Assets/AssetBundles: 디렉토리에 에셋 번들의 결과물이 출력됩니다. 결과물이 출력되는 디렉토리는 원하는 대로 변경할 수 있지만, 빌드를 시도하기 이전에 설정한 폴더가 실제로 존재하는지 확인하기 바랍니다.

BuildAssetBundleOptions

다양한 BuildAssetBundleOptions를 사용할 수 있으며, 각각의 옵션은 다양한 효과를 냅니다. 모든 옵션을 표로 확인하려면 BuildAssetBundleOptions의 스크립팅 API 레퍼런스를 확인합니다.

BuildAssetBundleOptions를 필요한 대로 동시에 사용할 수 있지만, 에셋 번들 압축에 관여하는 3개의 구체적인 BuildAssetBundleOptions이 있습니다.

  • BuildAssetBundleOptions.None: 이 번들 옵션은 직렬화된 데이터 파일의 압축된 단일 LZMA 스트림인 LZMA 압축 포맷을 사용합니다. LZMA 압축 포맷은 번들을 사용하기 전에 전체 번들의 압축을 풀어야 합니다. 따라서 파일 크기는 가장 작아지지만, 압축 해제 때문에 로드 시간이 조금 길어지게 됩니다. BuildAssetBundleOptions를 사용하는 경우 번들의 에셋을 사용하기 위해 모든 번들의 압축을 풀어야 합니다.
    번들의 압축이 풀린 이후에는 디스크에서 LZ4 압축 포맷을 사용하여 다시 압축됩니다. LZ4는 번들의 에셋을 사용하기 위해서 모든 번들의 압축을 풀 필요가 없습니다. 이 옵션은 번들의 에셋을 사용하기 위해서 모든 에셋을 로드해야 하는 경우 사용하기에 적합합니다. 이러한 경우의 예제로 캐릭터나 씬에 대한 모든 에셋을 묶는 경우가 있습니다.
    LZMA 압축 포맷을 사용하는 것은 파일 크기가 작다는 점을 고려했을 때, 외부 호스트에서 에셋 번들을 최초로 다운로드 받을 때만 권장합니다. UnityWebRequestAssetBundle을 통해 로드된 LZMA 압축 에셋 번들은 자동으로 LZ4 압축으로 재압축되어 로컬 파일 시스템에서 캐시됩니다. 번들을 다른 방법으로 다운로드하고 저장하는 경우 AssetBundle.RecompressAssetBundleAsync API로 재압축할 수 있습니다.

  • BuildAssetBundleOptions.UncompressedAssetBundle: 이 번들 옵션은 데이터가 전혀 압축되지 않는 방식으로 번들을 빌드합니다. 이 옵션의 단점은 데이터가 압축되지 않았기 때문에 다운로드할 파일 크기가 크다는 점입니다. 하지만 다운로드된 파일을 로드하는 속도는 비교적 빠릅니다. 압축되지 않은 에셋 번들은 16바이트로 정렬됩니다.

  • BuildAssetBundleOptions.ChunkBasedCompression: 이 번들 옵션은 LZ4 압축 메서드를 사용합니다. 메서드는 LZMA 압축 포맷보다 압축된 파일 크기가 크지만 LZMA 포맷과는 다르게 에셋을 사용하기 전에 모든 번들의 압축을 풀 필요는 없습니다. LZ4 압4축 포맷은 청크 기반 알고리즘을 사용하여 에셋 번들이 부분적으로 또는 “청크” 단위로 로드될 수 있도록 합니다. 단일 청크의 압축을 풀면 에셋 번들에서 다른 청크의 압축을 풀지 않아도 해당 청크에 포함된 에셋을 사용할 수 있습니다.

ChunkBasedCompression 옵션을 사용하면 압축되지 않은 번들과 비슷한 로드 속도를 가지게 되지만 디스크의 용량은 적게 차지합니다.

BuildTarget

BuildTarget.Standalone: 이 옵션은 에셋 번들을 사용할 타겟 플랫폼이 무엇인지 빌드 파이프라인에 알려주게 됩니다. Scripting API Reference에서 사용 가능한 명시적인 빌드 타겟의 리스트는 BuildTarget을 참조하십시오. 하지만 빌드 타겟에 하드 코딩을 하기를 원치 않는다면 EditorUserBuildSettings.activeBuildTarget 옵션을 사용합니다. 이 옵션은 현재 빌드 설정이 된 플랫폼을 자동적으로 찾고 그 타겟 기반의 에셋 번들을 빌드합니다.

빌드 스크립트를 적절하게 설정한 이후, 번들을 빌드합니다. 위의 스크립트 예제를 따른 경우 Assets > Build AssetBundles 을 클릭하여 프로세스를 시작합니다.

Now that you’ve successfully built your AssetBundles, you may notice that your AssetBundles directory has more files than you might have originally expected. 2*(n+1) more files, to be exact. Let’s take a minute and go over exactly what the BuildPipeline.BuildAssetBundles call yields.

에디터 상으로 특정한 에셋 번들마다 에셋 번들의 이름으로된 파일과 에셋 번들 이름 + “.manifest”로 된 파일이 생성됩니다.

There will be an additional bundle and manifest that doesn’t share a name with any AssetBundle you created. It, instead, is named after the directory that it’s located in (where the AssetBundles were built to). This is the Manifest Bundle. This bundle contains the AssetBundleManifest object which will be useful for figuring out which bundle dependencies to load at runtime. To learn more about how to use this bundle and the manifest object, see documentation on Using AssetBundles Natively.

에셋 번들(AssetBundle) 파일

이 파일은 .manifest 확장자가 없는 파일로서 에셋을 로드하기 위해 런타임 시점에 로드해야 하는 파일입니다.

에셋 번들 파일은 다수의 파일을 내부적으로 포함하는 아카이브입니다. 아카이브의 구조는 파일이 에셋 번들인지 또는 씬 에셋 번들인지에 따라 미세하게 달라질 수 있습니다. 다음은 일반적인 에셋 번들의 구조의 예제입니다.

씬과 그 콘텐츠를 스트림 로딩할 수 있도록 최적화되었다는 점이 씬 에셋 번들 구조가 일반적인 에셋 번들 구조와 다른 점입니다. 다음의 그림은 씬 번들의 내부 구조입니다.

매니페스트(Manifest) 파일

For every bundle generated, including the additional Manifest Bundle, an associated manifest file is generated. The manifest file has the extension .manifest and can be opened with any text editor. It contains information such as the cyclic redundancy check (CRC) data and dependency data for the bundle. The manifest files for normal AssetBundles will look something like this:

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: {}

포함된 에셋, 종속성, 그리고 기타 정보를 보여줍니다.

A manifest file is also generated for the Manifest Bundle. It will look like this:

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

This file records how AssetBundles relate, and what their dependencies are. This is similar to the information recorded by the AssetBundleManifest object, inside the Manifest Bundle, and because it is a text file it is convenient for human readability and parsing by external tools.

에셋 번들을 위한 에셋 준비
에셋 번들 종속성
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961