渋谷ほととぎす通信

「Unityをわかりやすく」初心者のためのゲーム作りブログ

アセットバンドルに複数のアセットを格納して取り出す

アセットバンドルに複数のアセットを格納して取り出す

こんにちは、Unityエンジニアのオオバです。

今まであまりアセットバンドルを作る事がありませんでした。
個人で小規模ゲーム作る時にわざわざアセットバンドルを用意することはありませんでしたし、仕事でもそういう担当になることはありませんでしたので、試しにやってみておきます。

👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

アセットバンドルの作り方

アセットバンドルビルドスクリプト · GitHub

BuildPipeline.BuildAssetBundles関数を実行することでアセットバンドルは作成されます。

引数内容
第1引数出力先
第2引数ビルドオプション
第3引数ターゲットプラットフォーム

サンプルコードでは第1引数の出力先を "StreamingAsssets" としています。この場合、Assetsフォルダ配下のStreamingAssetsフォルダ内にアセットバンドルが格納されます。
第2引数のビルドオプションはリファレンスの通り、色々と設定ができますが割愛します。

BuildAssetBundleOptions - Unity スクリプトリファレンス

アセットバンドル対象ファイルの指定方法

ではアセットバンドルは何が条件で作成されるのかというと、アセットバンドル名をつけたアセットがアセットバンドルビルド対象になります。

具体的には、Project内のファイル(フォルダも可)を選択して、インスペクタ下部のAssetBundleから名前をつけるだけです。

アセットバンドルに複数のアセットを格納して取り出す_0

ここで、先ほどのビルドスクリプトを走らせれば、test という名のアセットバンドルが作成されます。

余談ですが、一つ一つ手入力するのは面倒くさいのでスクリプトを書いて少し自動化してみます。
選択したオブジェクトの名前をアセットバンドル名としてAssetBundle名をセットしていくサンプルコードです。

SetNameSelection.cs · GitHub

また以下の注意点に注意してください。

  • アセットバンドル名はユニークである必要があります
  • アセットバンドル名は小文字しか使用できません

では本題の複数のファイルを1つのアセットバンドルに含める方法です。
フォルダをアセットバンドル化してそれを実現します。

アセットバンドルに複数のアセットを格納して取り出す_1

Bar、Hoge、Piyoの3オブジェクトを格納したFugaフォルダを選択状態にして、先のSetNameSelectionを実行し、AssetBundle名(fuga)を付けます。

複数のアセットを取り出す · GitHub

こちらのサンプルコードでアセットを取り出します。

まとめ

  • アセットバンドルはアセットバンドル名を付けたものだけがアセットバンドル化される
  • フォルダをアセットバンドル化すれば複数アセットをパックできる
  • 取り出す時はアセット名をキーにして取り出すか、LoadAllAssetでゴリッとゲット
オススメ記事
検証環境
  • Unity2017.1.0f3