Version: 2020.2
言語: 日本語
アセットバンドルのワークフロー
アセットバンドルのビルド

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

AssetBundle (アセットバンドル) を使用するに当たっては、好きなアセットを好きなバンドルに自由に割り当てることができます。ただし、バンドルのセットアップに関しては、いくつかの異なる方法を検討する必要があります。異なる分類方法の中から、それぞれのプロジェクトに適したものを使用します。必要に応じて複数の方法を組み合わせることも可能です。

論理要素別の分類

論理要素別の分類は、アセットを、プロジェクト内における機能的な要素ごとにアセットバンドルに割り当てる方法です。この機能的な要素には、例えば UI やキャラクターや環境 (背景)、またその他、アプリケーションのライフタイムを通して頻繁に登場する可能性のある要素が含まれます。

  • UI 画面用の全てのテクスチャとレイアウトのデータをまとめてバンドルにする
  • 特定の、あるいは一式のキャラクターの、全てのモデルとアニメーションをまとめてバンドルにする
  • 複数のステージで共有される背景の各部分のテクスチャーやモデルをまとめてバンドルにする

論理要素別の分類は DLC (ダウンロードコンテンツ) に最適です。その理由は、各要素が別々に分かれているため、ある 1 つの要素に変更を加えた場合に、変更されていない余計なアセットをダウンロードする必要がなくなるからです。

この方法を正しく導入するためには、アセットをバンドルに割り当てる開発担当者が、プロジェクトのどこで、どのアセットが使用されるかを具体的に把握していることが非常に重要となります。

種類別の分類

例えばオーディオトラックや言語ローカライズファイルなど、類似した種類のアセットをひとつのアセットバンドルに割り当てる分類方法です。

種類別の分類は、複数のプラットフォームで使用するアセットバンドルをビルドする場合に適した方法のひとつです。例えば、オーディオ圧縮の設定が Windows と Mac で全く同じである場合、全オーディオデータ (だけ) をまとめてアセットバンドルに入れ、それらのバンドルを再利用することができます。一方シェーダーは、各プラットフォームにより特化したオプションでコンパイルされる傾向にあるため、Mac 向けにビルドしたシェーダーバンドルが Windows で再利用できるとは限りません。また、この分類方法は、コードスクリプトやプレハブなどと比べてテクスチャー圧縮の形式や設定の変更頻度が低くなるため、より多くのバージョンの Unity プレイヤーとの互換性をアセットバンドルに持たせたい場合に非常に適しています。

同時コンテンツごとの分類

同時に読み込み・使用されるコンテンツを同じバンドルにまとめる方法です。このタイプのバンドルは一般的には、ステージ構造のゲームで、各ステージが全く異なる固有のキャラクターやテクスチャー、音楽などを持っている場合に使用されます。この方法を採用するのは、アセットバンドルに含まれるアセットは、同じバンドル内の他のアセットと同時にしか使用されないことが確実でに分かっている場合のみにしてください。同時コンテンツごとの分類で作成されたバンドル内のアセットに対する依存がひとつでもあると、読み込み時間が大幅に増加します。そのたったひとつのアセットのために、バンドルが丸ごとダウンロードされてしまうからです。

同時コンテンツごとの分類は、シーンごとのバンドルを作成する際に最もよく使用されます。この割り当て方法では、各シーンのバンドルに、そのシーンのほとんど (または全て) の依存を含めます。

ひとつのプロジェクトで複数の方法を併用することも可能です。必要に応じて上手に組み合わせてみてください。アセットを最適な方法で割り当てることで、プロジェクトの効率性を大幅に向上させることができます。

例えば、ひとつのプロジェクトで、UI 要素はプラットフォーム別にまとめてバンドルに入れ、インタラクティブコンテンツはステージやシーンごとにまとめるということも可能です。

いずれの方法を採用する場合も、以下にご紹介するヒントを参考にしてください。

  • 頻繁に更新されるオブジェクトとあまり変更されないオブジェクトを別々のアセットバンドルに入れる。
  • 同時に読み込まれる可能性の高いオブジェクト同士をまとめる。例えば、特定のモデルとそのテクスチャーとアニメーション、など。
  • 複数の異なるアセットバンドル内にある複数のオブジェクトが、全く別のアセットバンドル内の 1 つのアセットに依存している場合は、その依存を別のアセットバンドルに移す。いくつかのアセットバンドルが、別のアセットバンドル内にある同じ一式のアセットを参照している場合は、これらの依存を抜き出して 1 つの共有のアセットバンドルに移動させることで重複を減らすと良いかもしれません。
  • 同時に読み込まれることはないであろう 2 つのオブジェクト (例えば、標準アセットと HD アセット) がある場合、それらは別々のアセットバンドルに分けるようにしてください。
  • 特定のアセットバンドルのコンテンツのうち頻繁に同時に読み込まれるものが 50% 未満である場合は、そのアセットバンドルを分割することを検討してみてください。
  • コンテンツが頻繁に同時に読み込まれる小さな(アセット 5~10 個未満の)アセットバンドルが複数あれば、それらのバンドルをひとつにまとめることを検討してみてください。
  • 複数のオブジェクトが、同一オブジェクトの単なる別バージョンである場合は、アセットバンドル バリアントの使用を検討してみてください。
アセットバンドルのワークフロー
アセットバンドルのビルド