見出し画像

個人開発者向けのUnityWebGLビルドのPublishSettingの設定について(version 2019.4)

前提


現在ふりーむ上で公開しているブラウザゲーム(WebGL)を例にする。

制作環境
Win10 + Unity 2019.4.22f1 (64-bit) +Naninovel v1.15

制作アセットのNaninovel v1.15 の推奨環境がUnity 2019.4.22f1のため
2019.4のバージョンのWebGL向けのビルドセッティング(PublishSetting)
のお勉強。なんとなく理解することが目的の記事。
Unityの他のバージョンは設定項目が微妙に異なるので注意。

当然Development Buildのチェックは外す
デバッグ用の機能がまるごとビルドされると、ビルドサイズも大きくなるのでリリース用のものであればチェックは不要。

PublishSettingの項目

Enable Exceptions

エラー(予期せぬ例外)発生時の処理方法の指定:Defaultでよい。

None:パフォーマンス向上、ビルドサイズ小さくなるが、エラーが発生したら強制アプリ停止
Explicitly Thrown Exceptions Only (default): ↑よりパフォーマンス少し落ちる、ビルドサイズもやや増える。try-throw で例外をキャッチしてfinally内の処理を実行する。
Full Without Stacktrace:↑にNull参照と範囲外の配列アクセスもキャッチ
Full With Stacktrace:↑+スタックトレースもキャプチャ、パフォーマンスは低下、メモリ使用増、デバックのみに使用。

Compression Format

公開サーバー側で解凍の仕組みがあるならそれに対応したフォーマット、無い場合はDisabledが無難

Unityの公式ドキュメント引用:
リリースビルドファイルに使用する圧縮形式を選択します。
選択肢は Gzip、Brotli、Disabled (none) です。このオプションは開発ビルドには影響しないことに注意してください。

今回のプロジェクトでの実験はBuild/のサイズが
Gzip: 23.8M byte
Disabled: 52.4M byte
となった。
ゲームのサーバー側で解凍できる仕組みがある場合は圧縮をお勧め、そうでない場合は非圧縮推奨。理由はこちらの記事を参照


Name Files As Hashes

お好みで

Unityの公式ドキュメント引用:
これを有効にすると、ビルドの各ファイルのファイル名として非圧縮ファイルコンテンツの MD5 ハッシュを使用できます。


何のために?と思ったけど、ファイル名をそのまま公開したくない、難読化させたいみたいな企業向けのオプションかも。
例えばBuild以下に出来上がる以下のファイル群

UnityLoader.js
Appname.wasm
Appname.wasm.framework.unityweb
Appname.data.unityweb
Appname.json

が各MD5ハッシュのファイル名に変わる

061f463856577255fb5eefaf73e67127.js
15956e734c01c806d2e04bbe1cf4c58e.wasm
593ef83ca025210c319a07d8b0db1ee4.unityweb
ac028885338b7d9a162509fd46e60c07.unityweb
f9155dd0cfb6ccd0a78a537a185238bd.json


Data Caching

だいたいゲームは有効になっていると思われる。チェック推奨。

Unityの公式ドキュメント引用:
有効にすると、自動的にコンテンツのアセットデータをユーザーマシン上にキャッシュする。そのため、(コンテンツが変更されない限り) 2回目以降のプレイは即プレイ可能になる。Caching は、IndexedDB API を使用して実行。ブラウザーによっては、ユーザーの許可を求められることがある。

無効にするとアクセスするたびに長いダウンロードが実行されることになる。

Debug Symbols

開発途上でデバッグ目的強めなら有効にした方がよさそう?ガチ開発者むけっぽい。それ以外の人は不要かと思われる。

Unityの公式ドキュメント引用:
このオプションを有効にすると、デバッグシンボルが保持され、エラーが発生したときにスタックトレースのデマングリング(元の関数名の表示)が実行されます。 リリースビルドの場合、すべてのデバッグ情報は、エラーが発生したときにオンデマンドでサーバーからダウンロードされる別のファイルに保存されます。 開発ビルドでは、常にメインモジュールにデマングリングサポートが組み込まれているため、このオプションの影響を受けません。

エラーした箇所の関数名がわかる。けどダウンロードされる別ファイルってどこやねんとおもったり、このあたりのデバックの仕組みはまだよくわかってない。
わかっている人はチェックを入れる。よくわからん人はチェック入れなくてよい。

WebAssembly Streaming

チェックを入れた方がよい。

Unityの公式ドキュメント引用:
ブラウザが、ストリーミングされたソースから直接WebAssemblyモジュールをコンパイルおよびインスタンス化できるようにします。
Web引用:
WebAssemblyとは? 
ブラウザからアセンブリ(機械語)を実行できるようにする技術 ※事前コンパイルが必要。高速化手段、あるいはJavaScriptの処理系にできないことをするといった目的で提案された。2015年6月、Mozilla、Google、Microsoft、Appleが標準フォーマットとして開発することに合意した。

現在の主流なブラウザWebAssemblyに対応しているはずなので、
WebGLなどのグラフィック処理をする際はファイルサイズ縮小、ロード時間短縮(最大3倍)のためチェックを入れたほうがよい。

実際チェックを外すとゲーム開始時の初回ロードが長い長い。


参考リンク

WebAssemblyの参考ページ
https://qiita.com/umamichi/items/c62d18b7ed81fdba63c2

引用元Unity マニュアル公式(WebGL)
https://docs.unity3d.com/ja/current/Manual/class-PlayerSettingsWebGL.html

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
何かしら作る系兼業エンジニア。 裏方として100人以上のクリエイターと関わりコンテンツを制作してきました。 ひそかにゲーム制作をしています。Arcanite Links: https://arcanite-links.wixsite.com/game Noteはその備忘録。