はじめに
Unityで作成したゲームをWeb上に公開し、自分のサイトからリンクを貼って動作確認していたところ、
以下のようなエラーが表示されました。
WebAssembly streaming compilation failed!
This can happen for example if “Content-Encoding” HTTP header is incorrectly enabled on the server for fileBuild/FallAppleGame.wasm
, but the file is not pre-compressed on disk (or vice versa).
自分のMacではゲームは普通に動いたのですが、他の人のWindows PCではゲームが動作しないという問題が起きたため、
今回はこのエラーの原因と解決方法について調べてみました。
結論:リンクが「http」になっていたのが原因
最終的に判明した原因は、リンク先のURLが「http」で始まっていたことでした。
なぜ「http」だと問題になるのか?
WebAssemblyの通信や読み込み処理は、セキュリティ上の理由から「https」通信が推奨・前提になっている場合があります。
「http」の場合、以下のような問題が発生する可能性があります。
- サーバーが適切なヘッダー(Content-Encodingなど)を扱えない
- 圧縮ファイルとの整合性がとれない
- クロスオリジン制限やブラウザのセキュリティポリシーにより、読み込みがブロックされる
Macでは問題が起きず、Windowsでだけエラーが出たのも、ブラウザごとのセキュリティ設定の違いによるものと考えられます。
解決方法:Webサイトを「https」にする
「https」に切り替えるにはSSL証明書が必要
「https」とは、通信内容を暗号化してやり取りする安全なプロトコルのことです。
これを有効にするには、SSL証明書の導入が必須です。
私のケース:さくらインターネットで簡単にSSL化できた
私は「さくらインターネット」のサーバーを使っていたため、
管理画面からボタンをクリックするだけでSSL設定(https化)が完了しました。
SSL化の一般的な手順(レンタルサーバーの場合):
- 管理画面にログイン
- ドメイン管理 → サイト設定 → SSL設定を選択
- 「無料SSLを利用する(Let’s Encryptなど)」を有効にする
- 証明書発行を待つ(数分〜数時間)
- 「https://〜」でアクセスできるか確認
まとめ
UnityのWebゲームを公開したときに発生した
「WebAssembly streaming compilation failed」エラーは、
リンク先のURLが「http」だったことが原因でした。
ポイント:
- WebAssemblyは基本的に**「https」通信を前提**として動作する
- 自分の環境(Mac)では動作しても、他の環境ではセキュリティ上ブロックされる場合あり
- SSL証明書を導入して「https」に変更することでエラーは解消
今後もUnityゲームをWebで公開する機会があると思うので、
https化の重要性は忘れずに意識しておこうと思いました。