今回は、UnityでWebGL向けにビルドを行ってみたけどテストプレイが上手くいかない!と困っている方の解決方法の1つかと思い紹介しておきます。ちなみに、Windowsを使用しているのでWindowsユーザー向けの内容となります。
【Unity】WebGLビルドが「テストプレイできない」時の解決手順
UnityでWebGLにビルドしたのに、index.htmlを開いても起動しない/赤いエラーが出る。
今回ハマった原因はWebGLはfile://で動かせない&Brotli(.br)圧縮の配信ヘッダー問題&ブラウザのキャッシュでした。
この記事では、これらの解決手順についてまとめています。
症状1:index.htmlをダブルクリックするとエラー
まず、前提としてUnityからビルドするときに「Build」でビルドしたものを開く際のエラーです。「Build and Run」したわけではありません。
WebGLビルドのindex.htmlをエクスプローラーからダブルクリックで開くと、赤文字のエラーが出て起動できません。

原因
WebGLはブラウザの制限で、file://から別ファイルを読み込めません。
必ずHTTPサーバー経由(http://localhost/)で開く必要があります。
まず確認:ビルドフォルダの場所(OneDriveに注意)
私の環境ではデスクトップがOneDrive配下になっていて、ビルドフォルダがこの場所にありました:
-
C:\Users\(ユーザー名)\OneDrive\デスクトップ\kazenorenzu
フォルダが見つからない場合にはOneDrive配下になっていないか要チェックです。ビルドする際にデスクトップにゲームのタイトル等で何かしらフォルダを作ってその中にビルドファイルを作る事が多いと思います。
私も、デスクトップに「kazenorenzu」という名前のフォルダを作っています。
手順1:PowerShellでビルドフォルダへ移動
PowerShellを開いて、ビルドフォルダへ移動します。
手順2:ローカルサーバーを立てる(Python)
WebGLはサーバー経由で起動するので、Pythonでローカルサーバーを立てます。
Pythonが入っているか確認
-
Python 3.xx.xと出ればOK
-
Microsoft Storeが開く/動かない場合はPythonが未導入(またはエイリアス問題)なのでPythonをインストールします
Pythonが入っていない場合には、Windows Storeに行ってPythonと検索してインストールします。
症状2:python -m http.serverで起動しても .brが読めない

原因
Unity WebGLのビルドは.br(Brotli圧縮)ファイルを出力しますが、簡易サーバーだと.br に Content-Encoding: brを付けずに配ってしまい、ブラウザが展開できないことがあります。
手順3:Unity用のローカルサーバー(.br対応)を使う
そこで、ビルドフォルダ直下にserve_unity.pyを作って、.br / .gzに適切なヘッダーを付けて配信できるようにします。
serve_unity.pyを作成
kazenorenzuフォルダにserve_unity.pyという名前で作成し、以下を貼り付けて保存します。
サーバー起動
python “.\serve_unity.py”
成功するとPowerShellにアクセスログが流れます(例:GET / … 304など)。
304はエラーではなくキャッシュが有効という意味です。
serve_unity.pyの拡張子が「txt」だったり、ファイル名が間違っていたりするとうまくいかないので要チェックです。
dirコマンドで一覧を出せるのでここでtxtになっていないか確認します。
txtファイルになっていたら上のようにファイル名を改名します。
ブラウザで起動
症状3:通常Chromeだとエラー、シークレットだと動く
ここまでやっても 通常のChromeではまだエラー。でもシークレットウィンドウだと正常起動しました。
原因
通常Chrome側に、過去に失敗したときの壊れたキャッシュ(.br を誤った扱いで保存した等)が残っている可能性が高いです。
シークレットはキャッシュを使わないので正しく読み直せて動きます。
通常Chromeでも動かす(キャッシュ削除)・強制リロード・キャッシュの削除
Ctrl + Shift + R(またはCtrl + F5)でリロードしてみましょう。これでも上手くいかない場合Chrome設定 → プライバシーとセキュリティ → 閲覧履歴データの削除 → 「Cookieと他のサイトデータ」「キャッシュされた画像とファイル」を選んで削除します。

これで大抵Chromeならテストプレイ出来るかと思います。
まとめ(私がやった解決手順)
-
WebGLはfile//では動かないので、ローカルサーバーが必要
-
OneDrive配下のデスクトップにビルドフォルダがあったので、正しいパスへ
-
.brがUnable to parseになったので、.brにContent-Encoding: brを付けるserve_unity.py を用意
-
シークレットで動いた=通常Chromeはキャッシュが原因 → localhostのサイトデータ削除で解決
同じような状況で困っている方の参考になればと思います。


