2020/11/30エンジニア

    [Unity] 初心者でも簡単なAssetBundle の使い方

    執筆バージョン: Unity 2019 3.3f1

    執筆者/T.H.

    はじめに

    AssetBundle を使う上で、初心者でも簡単に出来る方法を紹介いたします。

    この記事の内容

    1. AssetBundle の作成方法

    2. AssetBundle の読込方法

    ファイルを用意しよう

    今回必要なファイルは 2 種類です。

    1. Unity 2019 3.3f1
    2. 任意の Unity プロジェクト

    実装してみよう

    ※本記事では Unity を日本語化しています。

    対象の Unity プロジェクトの Assets フォルダをエクスプローラーで開き、 Editor フォルダと StreamingAssets フォルダを作成します。

    Editor フォルダに AssetsBundleEditor.cs (ファイル名は任意) を作成し、下記のコードを記載、保存します。

    using System;
    using UnityEngine;
    using UnityEditor;
    using System.Collections.Generic;

    public class AssetBundleEditor
    {
        static string root_path = “AssetBundles”;
        static string variant = “assetbundle”;

        [MenuItem(“アセットバンドル/ビルド(Windows64 向け)”, false)]
        static private void BuildAssetBundlesForWindows64()
        {
            // 他プラットフォームを対象にする場合はここを変更する(今回は Windows64 向け)
            UnityEditor.BuildTarget target_platform = UnityEditor.BuildTarget.StandaloneWindows64;

            var output_path = System.IO.Path.Combine(root_path, target_platform.ToString());

            if (System.IO.Directory.Exists(output_path) == false)
            {
                System.IO.Directory.CreateDirectory(output_path);
            }

            var asset_bundle_build_list = new List<UnityEditor.AssetBundleBuild>();
            foreach (string asset_bundle_name in UnityEditor.AssetDatabase.GetAllAssetBundleNames())
            {
                var builder = new AssetBundleBuild();
                builder.assetBundleName = asset_bundle_name;
                builder.assetNames = UnityEditor.AssetDatabase.GetAssetPathsFromAssetBundle(builder.assetBundleName);
                builder.assetBundleVariant = variant;
                asset_bundle_build_list.Add(builder);
            }
            if (asset_bundle_build_list.Count > 0)
            {
                UnityEditor.BuildPipeline.BuildAssetBundles(
                    output_path,
                    asset_bundle_build_list.ToArray(),
                    UnityEditor.BuildAssetBundleOptions.ChunkBasedCompression,
                    target_platform
                );
            }
        }
    }

    (上記コードは Windows 向けなので、他プラットフォームを対象にする場合は target_platform を変更して下さい)

    Unity を起動し、対象のプロジェクトを開きます。

    (既に開いている場合はリフレッシュをするか、再起動して下さい)

    『アセットバンドル』が追加されている事を確認します。

    アセットバンドル化したいアセットを選択します。

    (本記事では test.json を使用します)

    アセットラベルからアセットバンドル名を設定します。

    (左側がアセットバンドル名)

    今回は TestBundle01 とします。

    アセットバンドル → ビルド(Windows64 向け)を選択し、アセットバンドル化します。

    プロジェクトフォルダ内の AssetBundles フォルダに出力されます。

    (今回であれば [プロジェクトフォルダ]\AssetBundles\StandaloneWindows64 の中)

    AssetBundles フォルダを StreamingAssets フォルダ内に配置します。

    起動

    アセットバンドルをロードします。

    string asset_bundle_path = Application.streamingAssetsPath + “/AssetBundles/StandaloneWindows64/testbundle01.assetbundle”;
    AssetBundle asset_bundle = AssetBundle.LoadFromFile(asset_bundle_path);

    アセット (test.json) をロードします。

    (今回は json なので TextAsset にした後、文字列を取得しています)

    TextAsset test_text_asset = assetBundle.LoadAsset<TextAsset>(“test”);string test_json_string = test_text_asset.text;

    まとめ

    アセットバンドルの実装は大変というイメージがありますが、手元で動かせるシンプルなコードが作成出来れば、それを足がかりに理解が進むと思います。Resources クラスを使わない選択肢として検討してみて下さい。

    関連記事

    ブログ一覧へ戻る