에셋 번들을 시작하려면 다음 단계를 따르십시오. 각 워크플로 단계에 대한 자세한 내용을 보려면 문서에서 본 섹션의 다른 페이지를 참조하십시오.
참고: 이 섹션에서는 빌트인 BuildPipeline.BuildAssetBundles API를 사용한 에셋 번들 생성에 대해 설명합니다. 더 사용자 친화적이면서도 권장되는 대안은 Addressables 패키지를 사용하는 것입니다.
해당 에셋을 에셋 번들에 할당하려면 다음 단계를 따르십시오.
/
를 이용해 폴더 이름을 구분합니다. 예를 들어 에셋 번들 이름을 environment/forest
라고 명명한 경우 environment
하위 폴더에 forest
라는 이름의 번들이 생성됩니다.참고:인스펙터에서 프로젝트의 폴더에 에셋 번들을 할당할 수 있습니다.기본적으로 해당 폴더의 모든 에셋은 폴더와 동일한 에셋 번들에 할당됩니다.그러나 개별 에셋에 대한 에셋 번들 할당이 우선합니다.
에셋 번들 할당에 대한 자세한 내용 및 관련 정보는 에셋 번들용 에셋 준비 문서를 참조하십시오.
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.GetAllAssetBundleNames 및 AssetDatabase.GetAssetPathsFromAssetBundle을 호출한 다음 해당 정보로 AssetBundleBuild 배열을 채웁니다.
에셋 번들은 여러 가지 방법으로 배포할 수 있습니다.
파일이 배포되는 방식에 따라 AssetBundle.Load API 또는 UnityWebRequestAssetBundle을 사용하여 에셋 번들을 로드하고 런타임 코드에서 에셋 번들 오브젝트에 액세스해야 합니다.
에셋 번들 오브젝트에서 LoadAsset 메서드 중 하나를 호출합니다. 예를 들어, 로드하려는 에셋의 유형 T
와 에셋의 이름(일반적으로 경로)을 사용하는 LoadAsset<T>(string)
를 호출할 수 있습니다. 반환된 오브젝트는 Unity 내부의 다른 오브젝트처럼 사용할 수 있습니다. 예를 들어 프리팹을 로드하는 경우 LoadAsset은 프리팹의 루트 게임 오브젝트를 반환하고, Instantiate()
를 호출하여 이를 현재 씬에 인스턴스화할 수 있습니다.
AssetBundle.Unload(bool) 또는 AssetBundle.UnloadAsync(bool)를 호출하여 로드된 에셋 번들이 사용하는 메모리를 회수할 수 있습니다.
에셋 번들을 로드 및 언로드하는 API에 대한 자세한 내용은 에셋 번들의 기본 활용을 참조하십시오.