一般的に、WebGL グラフィックス API はハードウェアアクセラレーションレンダリングに GPU を使用するため、GPU 上のネイティブのアプリケーションに近いウェブパフォーマンスが得られます。唯一の例外は、WebGL API 呼び出しとシェーダーを OS のグラフィックス API (通常は Windows の DirectX、Mac と Linux の OpenGL) に変換するためのわずかなオーバーヘッドです。
CPU では、Emscripten がコードを WebAssembly に変換します。このパフォーマンスは使用するウェブブラウザーに依存します。
以下の点に注意する必要があります。
ヒント:Unity の新しいタイムライン プロファイラー を使って、ウェブプラットフォーム以外で Unity がどのように異なるスレッドに作業を分配しているかを確認できます。
パフォーマンスを向上するには、ウェブの Player 設定で Other Settings > Stack Trace を展開し、Exception support を None に設定します。
プロファイラー はウェブプラットフォームで使用できますが、ウェブでビルドした実行中のプレイヤーにエディターからアタッチすることはできません。これは、WebGL API が通信に WebSocket を使用し、ブラウザー側での着信接続が許可されないためです。
実行中のプレイヤーにアタッチするには、Autoconnect Profiler 設定を有効にする必要があります。
注意Unity はウェブアプリケーションのドローコールをプロファイルできません。
詳細は、プロファイラーとデータソースの接続 を参照してください。
以下のいずれかのオプションが有効になっている場合、キャンバスまたはブラウザーウィンドウがフォーカスされなくなってもコンテンツの実行が続行されます。
ただし、一部のブラウザーでは、バックグラウンドタブで実行されているコンテンツを抑制できます。コンテンツのタブが表示されない場合、コンテンツはほとんどのブラウザーで 1 秒に 1 回しか更新されません。これにより、デフォルト設定で Time.time の進行が通常よりも遅くなることに注意してください。Time.maximumDeltaTime のデフォルト値が 1 秒未満であるためです。
一部の状況で、CPU の使用を減らすために低いフレームレートでウェブコンテンツを実行したい場合があります。例えば、他のプラットフォームでは、Application.targetFrameRate API を使用してこれを行うことができます。
パフォーマンスを減速したくない場合、この API にデフォルト値 –1 を設定します。これにより、ブラウザーのレンダリングループで最も滑らかなアニメーションにフレームレートが調整され、Unity がそのメインループのタイミングをターゲットフレームレートに合わせて調整するよりもよい結果が得られる場合があります。
ノート: セキュリティ上の理由から、Unity はブラウザーにフレームレートをクエリできません。その結果、Unity はすべてのブラウザーのディスプレイ レートを 60 fps と仮定し、その値に基づいて Application.targetFrameRate を設定します。