Version: 2018.4
言語: 日本語
WebGL プロジェクトのビルドと実行
WebGL ビルドのデバッグとトラブルシューティング

WebGL - 圧縮ビルドの展開

リリースモード (ビルドの作成 を参照) で WebGL プロジェクトをビルドすると、Unity はビルドの出力ファイルを圧縮して、ダウンロードサイズを減らします。Publishing Settings ( Edit > Project Settings > Player > Publishing Settings) の Compression Format オプションから使用する圧縮の種類を選択できます。

  • gzip: デフォルト設定。gzip ファイルは Brotli ファイルより大きいですが、ビルドにかかる時間が短く、http と https の両方に対しすべてのブラウザによってネイティブにサポートされています。

  • Brotli: Brotli は最も高い圧縮率を得られます。Brotli 圧縮ファイルは gzip よりも著しく小さくできますが、圧縮に長い時間がかかり、リリースビルドでの反復時間を増加します。Brotli 圧縮は https に関し、Chrome と Firefox によってネイティブにサポートされます (詳しくは WebGL のブラウザ間での互換性 を参照してください)。

  • Disabled: 圧縮を無効にします。ポストプロセススクリプトで独自の圧縮を実装したい場合はこのオプションを使います。

圧縮された Unity ビルドはどのブラウザでも作動します。Unity は JavaScript で書かれたソフトウェアデコンプレッサーを備えており、http 転送レベルの圧縮がサーバーによってできない場合は、そのデコンプレッサーを使用します。

上級 - ネイティブブラウザによる解凍

ブラウザは、ビルドデータをダウンロードしながら、ネイティブに Unity ビルドの解凍を処理できます。これには、JavaScript でファイルを解凍することによって発生する追加の遅延を回避し、起動時間を短縮できるという利点があります。ブラウザがネイティブに解凍を処理できるようにするには、圧縮されたファイルを適切な http ヘッダーで提供するように Web サーバーを設定する必要があります。http ヘッダーは、データの転送中にデータを解凍するように gzip または Brotli で圧縮されていることをブラウザに通知します。Brotli 圧縮は、Firefox および Chrome では https のみでサポートされ、一方、gzip 圧縮はすべてのブラウザでサポートされています。詳細は、WebGL のブラウザ間での互換性 を参照してください。

ウェブサーバーの設定

ブラウザのネイティブな解凍の設定プロセスは、ウェブサーバーによって異なります。このページの方法は、 ApacheIIS の 2 つの最も一般的なウェブサーバーに適用できます。これらの方法はデフォルト設定で動作するように設計されていますが、特定の設定に合わせて調整が必要な場合があります。特に、ホストされたファイルを圧縮するためのサーバー側の設定が既に他にある場合、この設定が妨げられる可能性があります。基本的な考え方は、Content-Encoding ヘッダーをサーバー応答に追加して、ビルド時に使用した圧縮の種類に対応することです。これにより、ブラウザはダウンロード中にネイティブかつ非同期で解凍を実行できます。

Apache

Apache サーバーは、サーバー設定に非表示の .htaccess ファイルを使用します。下のコードは、ネイティブのブラウザ解凍を強制する .htaccess ファイルの例です。Apache サーバーの設定はオプショナルです。

gzip で圧縮したビルドには、以下の .htaccess ファイルを Build サブフォルダーに置きます。

<IfModule mod_mime.c>
  AddEncoding gzip .unityweb
</IfModule>

Brotli で圧縮したビルドには、以下の .htaccess ファイルを Build サブフォルダーに置きます。

<IfModule mod_mime.c>
  AddEncoding br .unityweb
</IfModule>

IIS

IIS サーバー設定の必要なステップ

デフォルトでは、IIS サーバーは MIME の不明な静的コンテンツを処理しません。Unity のビルドを IIS で使用できるようにするためには、最初に .unityweb 拡張子を application/octet-stream コンテンツタイプに関連付けすることです。これを行うには 2 つの方法があります。

IIS マネージャーインターフェースを使用: IIS マネージャーパネルでウェブサイトを選択し、MIME 種類の追加 を開き、 追加… を選択します。.unityweb をファイル名の拡張子に設定し、application/octet-stream を MIME の種類に設定し、OK をクリックします。

サーバー設定ファイルを使用: IIS はサーバー設定に web.config ファイルを使用します。これらの設定ファイルは、特定のフォルダの IIS マネージャーで行われたすべての変更を反映します。application/octet-stream MIME 種類と .unityweb 拡張子を関連付けるには、以下の web.config ファイルを使用します。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
            <staticContent>
            <remove fileExtension=".unityweb" />
<mimeMap fileExtension=".unityweb" mimeType="application/octet-stream" />
            </staticContent>
    </system.webServer>
</configuration>

設定ファイルはサーバーのサブフォルダーすべてに影響します。ですから、サーバーのルートフォルダーで 1 度だけ .unityweb 拡張子の MIME 種類を設定するだけで十分なのです。

オプショナルな IIS サーバー設定のステップ

ビルドの起動時間を短縮するために、オプションで次の設定ファイルを使用することができます。この設定を使用するには、Microsoft の IIS URL Rewrite IIS モジュール がインストールされている必要があります。そうでないと、ブラウザは内部サーバーエラー 500 を投げます。

gzip で圧縮したビルドには、以下の web.config ファイルを Build サブフォルダーに置きます。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
            <staticContent>
                    <remove fileExtension=".unityweb" />
                    <mimeMap fileExtension=".unityweb" mimeType="application/octet-stream" />
            </staticContent>
            <rewrite>
                    <outboundRules>
                        <rule name="Append gzip Content-Encoding header">
                            <match serverVariable="RESPONSE_Content-Encoding" pattern=".*" />
                            <conditions>
                                    <add input="{REQUEST_FILENAME}" pattern="\.unityweb$" />
                            </conditions>
                            <action type="Rewrite" value="gzip" />
                        </rule>
                    </outboundRules>
            </rewrite>
    </system.webServer>
</configuration>

Brotli で圧縮したビルドには、以下の web.config ファイルを Build サブフォルダーに置きます。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
            <staticContent>
                    <remove fileExtension=".unityweb" />
                    <mimeMap fileExtension=".unityweb" mimeType="application/octet-stream" />
            </staticContent>
            <rewrite>
                    <outboundRules>
                        <rule name="Append br Content-Encoding header">
                            <match serverVariable="RESPONSE_Content-Encoding" pattern=".*" />
                            <conditions>
                                    <add input="{REQUEST_FILENAME}" pattern="\.unityweb$" />
                            </conditions>
                            <action type="Rewrite" value="br" />
                        </rule>
                    </outboundRules>
            </rewrite>
    </system.webServer>
</configuration>

<remove fileExtension=".unityweb" /> 行は、コンテンツの種類がサーバーディレクトリのより高い階層ですでにオーバーライドされている場合の処理に必須です。そうでない場合は、サーバー例外が発生します。


WebGL プロジェクトのビルドと実行
WebGL ビルドのデバッグとトラブルシューティング