渋谷ほととぎす通信

完全趣味でやってるUnityメモ。説明できないところを説明できるようにするための個人ブログ。昨日の自分より少しでも大きくなれるように。。。 ※所属団体とは一切関係がありません

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


f:id:esakun:20150730215258g:plain

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

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

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

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

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

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

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

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

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

f:id:esakun:20170302030313g:plain
※AssetBundle名の手入力サンプル

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

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

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

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

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

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

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

まとめ

  • アセットバンドルはアセットバンドル名を付けたものだけがアセットバンドル化される
  • フォルダをアセットバンドル化すれば複数アセットをパックできる
  • 取り出す時はアセット名をキーにして取り出すか、LoadAllAssetでゴリッとゲット

環境

  • Unity2017.1.0f3