Version: 5.4
アセットバンドルにスクリプトを含める
アセットバンドル FAQ

アセットバンドルと関連するディスクシークの最適化

Unity はデータをシリアライズします。そのため、ゲームを読み込むときデータは直線的に読み取られます。これにより、ゆっくり回転しているハードディスクドライブ (HDD) のシークの回数を削減します。ソリッドステートドライブ (SSD) に影響することはほとんどありません。

シーンのデータ (sceneN ファイルと sharedassetsN.assets ファイル) はオブジェクトタイプでソートされます。これは、タイプ依存 (Assets, ScriptableObjects, MonoBehaviours など) を利用しています。シーンを読み込む間、シーンのアセットすべてはまず、順次に一緒に読み込まれ、それから、シーンに読み込まれるオブジェクトが直線状に読み込まれます。1 つのファイルに同じデータが梱包される、シーンのアセットバンドルも同様です。

シーンに関連しないアセットバンドル (基本的には 1 つの sharedassets.assets ファイル) からのアセットはシーンのアセットバンドルと同様にシリアライズされますが、読み込みパターンはアセットバンドルのアセット読み込み API の使用によって決定されます。それらは、アセットバンドルの読み込み後にすべて一緒に読み込まれない場合もあります。つまり、ランダムなアクセスパターンで読み込まれる場合があります。

通常のアセットバンドルから読み込むとき、Unity は依存しているすべてのもののリストを作成し、ファイルに保存されている順にそれらを読み込みます。

  • AssetBundle.LoadAllAssets は直線的な読み込みパターンを使用し、すべてのアセットを読み込みます。

  • AssetBundle.LoadAsset はランダムな読み込みパターンを使用し、個々のアセットを読み込みます。

動作に関する注意

  • 非同期の読み込み機能の中には (ストリーミングオーディオや非同期テクスチャ読み込みなど) それがシーンに関するものであっても直線的な読み込みパターンで行わないものがあります。

  • 依存しているアセットバンドルに関しては、他のバンドルからの依存リソースがあるため、AssetBundle.LoadAllAssets であっても直線的なアクセスを保証しない場合があります。ディスクシークを最低に抑えるためには、すべての依存アセットバンドルは AssetBundle.LoadAllAssets API といっしょに読み込まれる必要があります。

  • DeterministicAssetBundles は直線的読み込みを破棄したり、タイプのソート順を変えたりすることはありません。ただし、オブジェクトの位置をあるタイプの範囲内に保持します。

  • チャンクベースで圧縮されたアセットバンドル (LZ4 圧縮とも呼ばれます) は直線的読み込みを破棄しませんが、読み込みの精度に影響する場合があります。詳しくは アセットバンドルの圧縮 を参照してください。

アセットバンドルにスクリプトを含める
アセットバンドル FAQ