에셋 번들을 시작하려면 다음 단계를 따르십시오. 각 워크플로 단계에 대한 자세한 내용을 보려면 문서에서 본 섹션의 다른 페이지를 참조하십시오.
참고:이 섹션에서는 빌트인 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 창에서 현재 선택된 플랫폼을 반환할 수 있습니다.
The example above describes how to use the Inspector to assign assets to AssetBundles. You can also assign assets to AssetBundles in code, using a signature of BuildPipeline.BuildAssetBundles that accepts an array of AssetBundleBuild structures. If you use this technique, the data you pass in takes priority, and any assignments to AssetBundles made in the Inspector are ignored.
에셋 번들은 여러 가지 방법으로 배포할 수 있습니다.
파일이 배포되는 방식에 따라 AssetBundle.Load API 또는 UnityWebRequestAssetBundle을 사용하여 에셋 번들을 로드하고 런타임 코드에서 에셋 번들 오브젝트에 액세스해야 합니다.
에셋 번들 오브젝트에서 LoadAsset 메서드 중 하나를 호출합니다. 예를 들어, 로드하려는 에셋의 유형 T
와 에셋의 이름(일반적으로 경로)을 사용하는 LoadAsset<T>(string)
를 호출할 수 있습니다. 반환된 오브젝트는 Unity 내부의 다른 오브젝트처럼 사용할 수 있습니다. 예를 들어 프리팹을 로드하는 경우 LoadAsset은 프리팹의 루트 게임 오브젝트를 반환하고, Instantiate()
를 호출하여 이를 현재 씬에 인스턴스화할 수 있습니다.
AssetBundle.Unload(bool) 또는 AssetBundle.UnloadAsync(bool)를 호출하여 로드된 에셋 번들이 사용하는 메모리를 회수할 수 있습니다.
에셋 번들을 로드 및 언로드하는 API에 대한 자세한 내용은 에셋 번들의 기본 활용을 참조하십시오.