Unity Web プラットフォームでは、キャッシュ API を使用して、.data ファイルやアセットバンドルにキャッシュされたアセットデータをブラウザーキャッシュ保存できます。最大ファイルサイズ、キャッシュ全体の最大サイズ、および削除基準などのブラウザーキャッシュのストレージ制限は、使用しているブラウザーとプラットフォームによって異なります。詳細については、ブラウザーのストレージ制限と削除基準を参照してください。
データキャッシングにアクセスするには、ウェブで Publishing Setings を開きます (File > Build Settings > Player Settings を選択します)。これにより、ブラウザーはメインデータファイルを IndexedDB データベースにキャッシュすることができます。
ブラウザーのデフォルトの HTTP キャッシュを使用しても、ブラウザーが特定の応答をキャッシュすることを保証するものではありません。これは、ブラウザーの HTTP キャッシュの容量が限られており、大きすぎるファイルをキャッシュできない可能性があるためです。
ロードの速度を向上させるために、IndexedDB ではブラウザーの制限を超えるファイルをキャッシュすることができます。より多くのファイルをキャッシュすると、ダウンロードしたコンテンツが次回のビルド実行時にユーザーのマシンで利用可能になる可能性が高くなります。
データキャッシングは、HTTP 応答用に IndexedDB キャッシュの .data ファイルのみをキャッシュします。AssetBundle をキャッシュするには、データキャッシュを有効にして、unityInstance.Module.cacheControl() をオーバーライドする必要があります。これを行うには、Module.cacheControl(url) が、要求された AssetBundle URL に対して must-revalidate を返すようにします。例えば、createUnityInstance() が返す Promise のフルフィルメントコールバックで unityInstance.Module.cacheControl() 関数をオーバーライドできます。createUnityInstance() の詳細については、圧縮されたビルドとサーバーの設定を参照してください。
デフォルトでは、ウェブキャッシュはアセットデータファイル .data と、AssetBundle ファイル .bundle を保存し、キャッシュからロードする前にこれらのファイルを再検証します。この動作を変更するには、UnityLoader の設定を変更する新しい Web テンプレートを追加します。
以下の例は、index.html ファイル内の UnityLoader 設定にカスタム cacheControl 関数を追加する例を示しています。
var config = {
// ...
#if USE_DATA_CACHING
cacheControl: function (url) {
// Caching enabled for .data and .bundle files.
// Revalidate if file is up to date before loading from cache
if (url.match(/\.data/) || url.match(/\.bundle/)) {
return "must-revalidate";
}
// Caching enabled for .mp4 and .custom files
// Load file from cache without revalidation.
if (url.match(/\.mp4/) || url.match(/\.custom/)) {
return "immutable";
}
// Disable explicit caching for all other files.
// Note: the default browser cache may cache them anyway.
return "no-store";
},
#endif
// ...
}
cacheControl 機能は、リクエストの URL をパラメーターとして受け取り、以下のいずれかを返します。
must-revalidate - この関数が must-revalidate を返すとキャッシュは有効な状態に戻り、ファイルはキャッシュからロードされる前に再検証されます。
immutable - この関数が immutable を返すとキャッシュは有効になり、ファイルは再検証なしでキャッシュからロードされます。
no-store - この関数が no-store を返すと、キャッシュは無効になります。
ブラウザーは、.html、.js、.css、.json、.jpg、.png などの特定のファイルタイプを自動的に保存 (キャッシュ) するため、ウェブキャッシュに明示的に保存する必要はありません。ウェブ キャッシュの典型的な対象としては、大きなファイルやカスタムファイル形式を使用するファイルなどがあります。