3
3

More than 5 years have passed since last update.

Unity WebGL ブートプロセス

Last updated at Posted at 2018-10-29

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 ファイルのサイズなども記録されている
  • 上記のため、リリースをする際には 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 が異なっていたらキャッシュから読まずにリモートからデータを取得する
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3