[Godot] Godot4.0のWebエクスポートしたゲームがエラーで動かない!(Cross Origin Isolation、SharedArrayBuffer)

Godot 4のWebエクスポートをサーバーやローカル環境で動かすと、こんなエラーが発生することがあります。

Error
The following features required to run Godot projects on the Web are missing:
Cross Origin Isolation - Check web server configuration (send correct headers)
SharedArrayBuffer - Check web server configuration (send correct headers)

これはGodot 4から、Cross Origin Isolation、SharedArrayBufferの利用が必須となったためです。

対策方法

まず対策方法です。

こちらはウェブサーバの.htaccessに次の定義を挿入します。

Header set Cross-Origin-Embedder-Policy "require-corp"
Header set Cross-Origin-Opener-Policy "same-origin"

通常この設定はドメインごとに行います。

当サイトも使っているエックスサーバーでは、サーバーパネル > .htaccess編集 > 対象ドメイン選択 の画面を出し、上記二行を追加します。

.htaccessの設定

その後にアップロードしたゲームのURLを開けば、ゲームが実行されるはずです。

※上記の画面はエックスサーバーのみに有効です。他のレンタルサーバや、AWSなどのクラウドプラットフォームをご利用の方は、.htaccess編集方法のマニュアルをご参照ください。もしくはレンタルサーバ会社やフォーラムで質問をしてください。

各設定のパラメータは読者にて調査し、理解してください。理解しないまま使うと、のちのち大きな問題となる場合があります。

※上記設定はドメイン全体に関わります。会社のドメインなど影響が広い場合は、必ずサーバ管理者に事前の確認を取ってください。サービスダウンなど、思わぬ事故を引き起こす可能性があります。この操作は読者の責任において行ってください。当サイトではいかなる保証も行えません。

Cross Origin Isolation、SharedArrayBufferとは?

この2つ、実はひとつの機能を実現するために必要となっています。

SharedArrayBufferとはブラウザ内で実行される複数のプロセス、スレッドが共有のメモリを使用できる機能です。

今まではプロセスごとにメモリを使用したため、同じゲームを複数のタブで開いた場合など、全く同じデータを何度も読み込むことになりました。同じデータをロードするので、メモリ利用も2倍、3倍と増えていくことになります。

SharedArrayBufferが利用できれば、必要なデータがメモリにロードされていればそのまま利用し、ムダな読み込みやメモリ消費を抑えることができます。

Cross Origin IsolationはSharedArrayBufferなどを有効/無効化する設定です。

  • Cross Origin IsolationにてSharedArrayBufferの設定を許可。(require-corp)
  • SharedArrayBufferは同じドメインなら許可。(same-origin)

という意味の設定になります。

WTS的まとめ

Godot4.0では高速性においても数々の改良が入っています。この変更もその一環ですね!

とはいえ、この情報は日本語での解説は皆無で、海外フォーラムでも混乱を呼んでいます。公式から詳しい解説を出した方がいいなと感じます。

コメント