Unity 5の頃のお話です
散らかったメモですが、誰かの参考になれば幸いです
ざっくり Unity WebGL ブートプロセス
- index.html 内に記載されている UnityLoader.js がロードされる
- UnityLoader.js 経由で js/mem を取得する
- その後に data が取得され、WebGL が起動する
Unity WebGL の成果物構成
- WebGL のビルドが完了したときに以下のファイルが生成される
* (Root Folder)
* index.html
* TemplateData
* favicon.ico
* fullbar.png
* fullscreen.png
* loadingbar.png
* logo.png
* progresslogo.png
* style.css
* UnityProgress.js
* (Release|Development)
* .htaccess
* (Output Name).data(gz)
* (Output Name).js(gz)
* (Output Name).mem(gz)
* UnityLoader.js
- Release ビルドを実施すると Release フォルダとなり、Development ビルドをするとフォルダ名が Development になる
- ここで、ビルド毎に異なるファイルは Release or Development フォルダ以下のファイルになる
- (Output Name).data / (Output Name).js / (Output Name).mem / UnityLoader.js
- Release ビルド時には gzip 圧縮される 5.X 以上で圧縮形式を選べる。UnityLoader.js は圧縮されない
- 圧縮されると拡張子の最後に gz が付与される
- UnityLoader.js はビルド毎に UUID 情報が埋め込まれている。Development の場合には、data ファイルのサイズなども記録されている
- (Output Name).data / (Output Name).js / (Output Name).mem / UnityLoader.js
- 上記のため、リリースをする際には data/js/mem に加え、UnityLoader.js も更新しなければならないことに気を付ける
キャッシュについて
js/mem をキャッシュする仕組み
- 既存のブラウザのキャッシュを踏襲している
- そのため配信する Web サーバ側にContent-Cache の設定を行い、変更がなければ、304 Not Modifed が返るように設定すれば、ある程度トラフィックを抑えることができる
data をキャッシュする仕組み
- Unity 5.x では Player Settings の「Data Caching」を有効にすると .data のキャッシュが働く
- .data が IndexedDB に保存されていて、.data の UUID も保存されている。
- UnityLoader.js 内部で PACKAGE_UUID という UUID を保持しており、その UnityLoader.js の UUID と IndexedDB に保存された PACKAGE_UUID を比較して、UUID が異なっていたらキャッシュから読まずにリモートからデータを取得する