Version: 2023.2
언어: 한국어
에셋 번들
에셋 번들을 위한 에셋 준비

에셋 번들 워크플로

에셋 번들을 시작하려면 다음 단계를 따르십시오. 각 워크플로 단계에 대한 자세한 내용을 보려면 문서에서 본 섹션의 다른 페이지를 참조하십시오.

참고: 이 섹션에서는 빌트인 BuildPipeline.BuildAssetBundles API를 사용한 에셋 번들 생성에 대해 설명합니다. 더 사용자 친화적이면서도 권장되는 대안은 Addressables 패키지를 사용하는 것입니다.

에셋 번들에 에셋 할당

해당 에셋을 에셋 번들에 할당하려면 다음 단계를 따르십시오.

  1. 프로젝트 뷰에서 번들에 할당할 에셋을 선택합니다.
  2. 인스펙터의 오브젝트를 검사합니다.
  3. 인스펙터 하단에 에셋 번들과 배리언트를 할당할 선택 항목이 있습니다. 왼쪽 드롭다운을 사용하여 에셋 번들을 할당하고, 오른쪽 드롭다운을 사용하여 배리언트를 할당합니다.
  4. 왼쪽 드롭다운의 None 을 클릭하여 현재 등록된 에셋 번들 이름을 표시합니다.
  5. New 를 클릭하여 새 에셋 번들을 생성합니다.
  6. 원하는 에셋 번들 이름을 입력합니다. 참고: 입력 내용에 따라 에셋 번들 이름은 폴더 구조 타입을 지원합니다. 하위 폴더를 추가하려면 /를 이용해 폴더 이름을 구분합니다. 예를 들어 에셋 번들 이름을 environment/forest라고 명명한 경우 environment 하위 폴더에 forest라는 이름의 번들이 생성됩니다.
  7. 에셋 번들 이름을 선택하거나 생성하면 필요에 따라 오른쪽 드롭다운에서 이 과정을 반복하여 배리언트 이름을 할당하거나 생성할 수 있습니다. 배리언트 이름은 에셋 번들을 빌드할 필요가 없습니다.

참고:인스펙터에서 프로젝트의 폴더에 에셋 번들을 할당할 수 있습니다.기본적으로 해당 폴더의 모든 에셋은 폴더와 동일한 에셋 번들에 할당됩니다.그러나 개별 에셋에 대한 에셋 번들 할당이 우선합니다.

에셋 번들 할당에 대한 자세한 내용 및 관련 정보는 에셋 번들용 에셋 준비 문서를 참조하십시오.

에셋 번들 빌드

Assets 폴더에서 Editor 폴더를 생성하고, 폴더에 다음과 같은 콘텐츠의 스크립트를 입력합니다.

using UnityEditor;
using System.IO;

public class CreateAssetBundles
{
    [MenuItem("Assets/Build AssetBundles")]
    static void BuildAllAssetBundles()
    {
        string assetBundleDirectory = "Assets/AssetBundles";
        if(!Directory.Exists(assetBundleDirectory))
            Directory.CreateDirectory(assetBundleDirectory);

        BuildPipeline.BuildAssetBundles(assetBundleDirectory,
                                        BuildAssetBundleOptions.None,
                                        BuildTarget.StandaloneWindows);
    }
}

이 스크립트는 Build AssetBundles 라고 하는 에셋 메뉴의 하단에 메뉴 항목을 생성합니다. Build AssetBundles 를 클릭하면 BuildAllAssetBundles() 함수가 호출됩니다. 진행 표시줄이 나타나는 동안 빌드가 에셋 번들 이름으로 레이블이 지정된 모든 에셋을 가져와서 assetBundleDirectory가 정의한 경로에 에셋 번들을 채우는 데 사용합니다.

BuildPipeline.BuildAssetBundles로 전달된 인자를 자세히 살펴보겠습니다.

assetBundleDirectory: 에셋 번들을 출력할 디렉토리(예: 현재 Unity 프로젝트 내의 “Assets/AssetBundles”)입니다. 폴더가 반드시 Assets 폴더 내부에 있을 필요는 없으며, 원하는 출력 디렉토리로 변경할 수 있습니다. 폴더가 아직 존재하지 않는 경우 스크립트가 필요에 따라 폴더를 생성하는 방법을 확인하십시오.

BuildAssetBundleOptions.None: 빌드 옵션 인자의 기본값입니다. 이 인자를 사용해서 하나 이상의 플래그를 지정하여 다양한 옵션 동작을 활성화할 수 있습니다. 예를 들어, 이 인자는 압축 알고리즘의 선택을 제어합니다. 에셋 번들 압축을 참조하십시오. 사용 가능한 옵션의 전체 목록은 BuildAssetBundleOptions를 참조하십시오.

BuildTarget.StandaloneWindows: 여기서는 이 에셋 번들을 사용할 타겟 플랫폼을 빌드 파이프라인에 알립니다. 사용 가능한 빌드 타겟 목록은 빌드 타겟에 대한 스크립팅 API 레퍼런스에서 확인할 수 있습니다. 또는 빌드 타겟을 하드코딩하는 대신 EditorUserBuildSettings.activeBuildTarget을 호출하여 Build Settings 창에서 현재 선택된 플랫폼을 반환할 수 있습니다.

스크립트를 사용하여 에셋 번들 콘텐츠 정의

위 예제에서는 인스펙터를 사용하여 에셋 번들에 에셋을 할당하는 방법을 설명합니다. 또한 코드에서 AssetBundleBuild 구조의 배열을 허용하는 BuildPipeline.BuildAssetBundles의 서명을 사용하여 에셋을 에셋 번들에 할당할 수도 있습니다. 이 기법을 사용하면 전달한 데이터가 우선권을 가지며, 인스펙터에서 생성된 에셋 번들에 대한 할당은 무시됩니다. 커스텀 스크립트가 인스펙터에서 생성된 에셋 번들 할당을 사용하도록 하려면 AssetDatabase.GetAllAssetBundleNamesAssetDatabase.GetAssetPathsFromAssetBundle을 호출한 다음 해당 정보로 AssetBundleBuild 배열을 채웁니다.

에셋 번들과 에셋 다운로드 및 로드

에셋 번들은 여러 가지 방법으로 배포할 수 있습니다.

  • StreamingAssets 폴더에서 파일을 찾아 플레이어 빌드에 포함하는 방법.
  • Unity의 Cloud Content Delivery와 같은 웹 서비스에서 호스팅하고 UnityWebRequestAssetBundle을 사용하여 다운로드하는 방법.
  • 자체 다운로드 또는 설치 코드로 배포하는 방법. 이 방식은 개발 작업이 더 많이 필요하지만 압축, 캐싱, 패칭, Unity API를 사용하여 파일을 로드하기 전 확인 등의 요소를 완벽하게 제어할 수 있는 유연성을 제공합니다.

파일이 배포되는 방식에 따라 AssetBundle.Load API 또는 UnityWebRequestAssetBundle을 사용하여 에셋 번들을 로드하고 런타임 코드에서 에셋 번들 오브젝트에 액세스해야 합니다.

에셋 번들 오브젝트에서 LoadAsset 메서드 중 하나를 호출합니다. 예를 들어, 로드하려는 에셋의 유형 T와 에셋의 이름(일반적으로 경로)을 사용하는 LoadAsset<T>(string)를 호출할 수 있습니다. 반환된 오브젝트는 Unity 내부의 다른 오브젝트처럼 사용할 수 있습니다. 예를 들어 프리팹을 로드하는 경우 LoadAsset은 프리팹의 루트 게임 오브젝트를 반환하고, Instantiate()를 호출하여 이를 현재 씬에 인스턴스화할 수 있습니다.

AssetBundle.Unload(bool) 또는 AssetBundle.UnloadAsync(bool)를 호출하여 로드된 에셋 번들이 사용하는 메모리를 회수할 수 있습니다.

에셋 번들을 로드 및 언로드하는 API에 대한 자세한 내용은 에셋 번들의 기본 활용을 참조하십시오.

에셋 번들
에셋 번들을 위한 에셋 준비