Version: 2023.2
言語: 日本語
アセットバンドル
アセットバンドル用のアセットの準備

アセットバンドルのワークフロー

AssetBundle (アセットバンドル) を使用するには、以下の手順で行います。各手順に関する詳細情報は、本セクションの他のページを参照してください。

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.

アセットバンドルにアセットを割り当てる

AssetBundle (アセットバンドル) へのアセットの割り当ては、以下の手順で行います。

  1. Project ウィンドウから、バンドルに割り当てたいアセットを選択します。
  2. Inspector ウィンドウで該当オブジェクトを確認してください。
  3. Inspector ウィンドウの下部に、アセットバンドルとバリアントを割り当てるセクションがあります。左側のドロップダウンでアセットバンドルを割り当て、右側のドロップダウンでバリアントを割り当てます。
  4. 左側のドロップダウンで None をクリックすると、現在登録されているアセットバンドル名が表示されます。
  5. New をクリックして新しいアセットバンドルを作成します。
  6. 任意のアセットバンドル名を入力してください。アセットバンドル名によって、フォルダー構造を表現できます。サブフォルダーを加えるには、フォルダー名を / で区切ります。例えば、environment/forest というアセットバンドル名は、environment というサブフォルダー配下に forest という名前のバンドルを作成します。
  7. アセットバンドル名の選択または作成後、バリアント名の割り当てや作成を行いたい場合は、右側のドロップダウンメニューから同じ手順で行うことができます。バリアント名はアセットバンドルのビルドには必須ではありません。

ノート: Inspector で、プロジェクト内のフォルダーにアセットバンドルを割り当てることができます。デフォルトでは、そのフォルダー内のすべてのアセットが、同じアセットバンドルにフォルダーで割り当てられます。ただし、個々のアセットに対するアセットバンドルの割り当てが優先されます。

アセットバンドルを割り当てる上での各種方法についての詳細は、このドキュメンテーションの アセットバンドル用のアセットの準備 のページを参照してください。 。

アセットバンドルをビルドする 

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. If you want your custom script to make use of AssetBundle assignments made in the Inspector then you can call AssetDatabase.GetAllAssetBundleNames and AssetDatabase.GetAssetPathsFromAssetBundle, then use that info to populate the AssetBundleBuild array.

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.

アセットバンドル
アセットバンドル用のアセットの準備