Version: 2023.1
言語: 日本語
WebGL のカーソルロックと全画面モード
WebGL ビルドのデバッグとトラブルシューティング

WebGL のパフォーマンスに関する考慮事項

一般に、WebGL グラフィックス API はハードウェアアクセラレーションレンダリングに GPU を使用するため、GPU 上のネイティブのアプリケーションに近いパフォーマンスを得られます。唯一の例外は、WebGL API 呼び出しとシェーダーを OS グラフィック API (通常は Windows の DirectX、Mac と Linux の OpenGL) に変換するためのわずかなオーバーヘッドです。

CPU では、Emscripten がコードを WebAssembly に変換します。そのため、パフォーマンスは使用するウェブブラウザーに依存します。詳細については、Unity のブログ WebAssembly Load Times and Performance を参照してください。

以下は、注意しなければならない追加的な考慮事項です。

  • The JavaScript language doesn’t support multi-threading or SIMD.
  • これらの機能の恩恵を受けるコードは、他のコードより遅くなる傾向があります。
  • You can’t write threading or SIMD code in WebGL scripts, but as some engine parts are multi-threaded or SIMD optimized, they offer low performance on WebGL. For example, WebGL Skinning is both multi-threaded and SIMD-optimized.

ヒント: Unity が WebGL 以外のプラットフォームで異なるスレッドに作業を分配する方法は、Unity の新しいタイムライン プロファイラー を参照してください。

パフォーマンスに影響する WebGL の設定

パフォーマンスを向上させるには、WebGL の Player 設定で、Other Settings > Stack Trace を展開して Exception supportNone に設定します。

WebGL のプロファイリング

WebGL は、Unity のプロファイラーをサポートします。設定方法について詳しくは、プロファイラー のドキュメントを参照してください。

バックグラウンドタブでの WebGL コンテンツ

Run in backgroundWebGL プラットフォームのプレイヤー設定 で有効になっている場合、または Application.runInBackground を有効にする場合、キャンバスやブラウザーウィンドウがフォーカスを失っても、コンテンツは引き続き実行されます。

ただし、ブラウザーはバックグラウンドタブで実行されているコンテンツを減速する場合があります。コンテンツのタブが表示されない場合、コンテンツはほとんどのブラウザーで 1 秒に 1 回しか更新されません。これにより、デフォルト設定の Time.time の処理速度が通常よりも遅くなることに注意してください。なぜなら、Time.maximumDeltaTime のデフォルト値が 1 秒より短いためです。

WebGL パフォーマンスの減速

ある状況では、CPU の使用を減らすために低いフレームレートで WebGL コンテンツを実行したい場合があります。例えば、他のプラットフォームでは、Application.targetFrameRate API を使ってそれを行うことができます。

パフォーマンスを減速したくない場合、この API に高い値を置くよりもむしろ、デフォルト値 –1 を設定します。こうすることにより、ブラウザーのレンダリングループでもっとも滑らかなアニメーションにフレームレートが調整され、Unity がそのメインループでターゲットフレームレートを調整するよりもよい結果が得られる場合があります。

WebGL のカーソルロックと全画面モード
WebGL ビルドのデバッグとトラブルシューティング