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

에셋 번들 워크플로

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

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.

에셋 번들에 에셋 할당

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

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

Note: In the Inspector you can assign an AssetBundle to a folder in your Project. By default, all Assets in that folder are assigned to the same AssetBundle as the folder. The AssetBundle assignments for individual Assets takes precedence, however.

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

에셋 번들 빌드

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);
    }
}

This script creates a menu item at the bottom of the Assets menu called Build AssetBundles. When you click Build AssetBundles the BuildAllAssetBundles() function is called. A progress bar appears while the build takes all the Assets you labeled with an AssetBundle name and uses them to populate AssetBundles at the path that assetBundleDirectory defines.

Let’s take a closer look at the arguments passed to BuildPipeline.BuildAssetBundles:

assetBundleDirectory: This is the directory that the AssetBundles will be output to, e.g. “Assets/AssetBundles” within the current Unity project. The folder does not need to be inside the Assets folder, you can change this to any output directory you desire. Notice how our script creates the folder on demand if it does not exist yet.

BuildAssetBundleOptions.None: This is the default value for the build options argument. You can use this argument to specify one or more flags to enable a variety of optional behaviours. For example, this argument controls the choice of compression algorithm, see AssetBundle compression. See BuildAssetBundleOptions for a full listing of the available options.

BuildTarget.StandaloneWindows: Here we’re telling the build pipeline which target platform we are going to be using these AssetBundles for. You can find a list of the available build targets in the Scripting API Reference for BuildTarget. Alternatively, rather than hardcoding your build target you could call EditorUserBuildSettings.activeBuildTarget, which return the platform currently selected in the Build Settings Window.

Using a Script to Define AssetBundles Contents

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.

Downloading and Loading AssetBundles and Assets

AssetBundles can be distributed in several ways:

  • Locating the files inside the StreamingAssets folder and including them with your Player build.
  • Hosted by a web service such as Unity’s Cloud Content Delivery and downloaded using UnityWebRequestAssetBundle.
  • Distributed by your own download or installation code. This approach takes more development work but does give flexibility to completely control aspects like compression, caching, patching and validation prior to loading the file using Unity APIs.

Depending how the files are distributed you should either use AssetBundle.Load APIs or UnityWebRequestAssetBundle to load an AssetBundle and access the AssetBundle object in your runtime code.

From the AssetBundle object, you call one of the LoadAsset methods. For example, LoadAsset<T>(string) which takes the type, T, of the asset you’re attempting to load and the name of the Asset (typically its path). You can use the returned object just like any object inside of Unity. For example, if you load a prefab then LoadAsset will return the prefab’s root GameObject, which you can then instantiate into your current scene by calling Instantiate().

You can reclaim memory used by a loaded AssetBundle by calling AssetBundle.Unload(bool) or AssetBundle.UnloadAsync(bool).

For more information on APIs that load and unload AssetBundles, see documentation on Using AssetBundles Natively.

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