Version: Unity 6.0 (6000.0)
言語 : 日本語
Creating AssetBundles
Assign assets to an AssetBundle

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

アセットバンドルを定義する場合には、いくつかのルールに注意する必要があります。

  • シーンとアセットを同じアセットバンドルに入れることはできません。個々のアセットバンドルに入れることができるのは、シーン_または_アセットの_いずれか_だけです。
  • 特定のシーンまたはアセットを複数のアセットバンドルに割り当てることはできません。
  • アセットバンドルにスクリプトアセットを入れることはできません。
  • StreamingAssets フォルダー内のファイルはアセットバンドルに入れることはできません。
  • アセットバンドルの名前を出力フォルダーの名前と同じにすることはできません。
  • アセットバンドルは、それが構築された特定のプラットフォームにのみロードできます。
  • エディターは、現在アクティブなプラットフォームプロファイルに関係なく、任意のアセットバンドルをロードできます。ただし、アセットバンドル内の個々のアセットが、エディターのプラットフォームでサポートされていないプラットフォーム固有の形式を使用している場合は、それらのアセットは正常にロードまたはレンダリングされないことがあります。例えば、Android シェーダーが Windows エディターでマゼンタとしてレンダリングされることがあります。

これらのルールをふまえたうえで、任意のアセットを任意のバンドルに自由に割り当てることができます。ただし、バンドルを設定する場合には、以下のような方法をいくつか検討する必要があります。

論理要素別の分類

論理要素別の分類という方法を使用して、プロジェクトの各アセットバンドルに含まれるものを整理することができます。この方法の原則では、コンテンツの各要素が表すプロジェクトの機能的な部分に基づいて整理します。この機能的な要素には、UI やキャラクター、環境 (背景)、その他アプリケーションのライフタイム全体を通して頻繁に表示される可能性のある要素が含まれます。

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

アセットバンドルを論理要素別に整理する方法は、ダウンロードコンテンツ (DLC) に最適です。プロジェクトに小さい変更を加えることが簡単になり、変更されていない残りのアセットを大量に再ダウンロードする必要がないためです。

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

種類別の分類

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

種類別の分類は、めったに変更されないアセットバンドルを確立するのに便利です。この方法でアセットバンドルを分類すると、アセットバンドルの変更が減り、インクリメンタルビルドが行われたときに配布の必要が少なくなることが考えられます。この方法のデメリットは、ランタイムにすべての依存オブジェクトをまとめるため、より多くのアセットバンドルをダウンロードしてロードする必要が生じる可能性があることです。

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

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

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

注意シーンが含まれているアセットバンドルをビルドする場合、そのシーンが参照するアセットも、(明示的に別のアセットバンドルに割り当てられている場合は除いて) 自動的にアセットバンドルに含まれます。これは同時コンテンツごとの分類を行うときに便利です。ただし、参照されているアセットが、別のアセットバンドルに組み込む他のシーンでも使用されている場合は、重複するアセットがないか注意する必要があります。

追加ヒント

プロジェクトでは、必要に応じてこれらの戦略を組み合わせることが可能なため、組み合わせて使用することをお勧めします。あらゆるシナリオに最適なアセットの割り当て方法を使用することで、すべてのプロジェクトの効率が大幅に向上します。

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

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

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