# 技術的制約

> Details the technical limitations of the Web platform.

ウェブブラウザーで実行するように設計された Unity のウェブアプリケーションには、ウェブテクノロジーによる制限が課せられます。ウェブプラットプラットフォーム用のアプリケーションをビルドする前に、以下の技術的な制限を確認してください。

## プラットフォームのサポート##platform-support

ほとんどの一般的なデスクトップブラウザーのバージョンは、Unity ウェブコンテンツをサポートしていますが、ブラウザーによって[サポートレベルが異なる](/engine/6000.0/manual/platform-specific/webgl/intro/browsercompatibility.md)ことに注意してください。

ウェブビルドにおいては、プラットフォーム自体の制約により以下の機能を使用できない、または制限されている場合があります。

### Visual Studio でウェブビルドのデバッグがサポートされていない##lack-of-web-build-debug-support-in-visual-studio

ウェブビルドのデバッグは Visual Studio ではサポートされていません。詳細は、[ウェブビルドのデバッグとトラブルシューティング](/engine/6000.0/manual/platform-specific/webgl/develop/debugging.md)を参照してください。

### Unity キャッシュとキャッシングスクリプトがサポートされていない##lack-of-unity-cache-and-caching-script-support

ブラウザーでファイルシステムへのアクセスが制限されているため、ウェブビルドでは Unity Cache と Caching Scripting API をサポートしていません。アセットデータおよび AssetBundles に対するネットワークリクエストは、代わりにブラウザーキャッシュへキャッシュされます。[ウェブのキャッシュ動作](/engine/6000.0/manual/platform-specific/webgl/develop/caching.md)を参照してください。

### スレッドがサポートされない##lack-of-input-system-keyboard-layout-mapping

JavaScript にスレッドサポートがないため、スレッドはサポートされていません。これはパフォーマンス向上のための Unity の内部的なスレッド使用にも、スクリプトコードやマネージ DLL でのスレッド使用にも適用されます。基本的に、`System.Threading` 名前空間の要素はサポートされません。

### ネットワークの制限##lack-of-managed-threading-support

ウェブプラットフォームでサポートしていないネットワーク機能がいくつかあります。

* ブラウザーではセキュリティ保護のため、ネットワーク機能で IP ソケットに直接アクセスすることができません。詳細は、[ウェブネットワーク](/engine/6000.0/manual/platform-specific/webgl/develop/networking.md)を参照してください。

* `System.Net` 名前空間内の .NET ネットワーククラスはサポートされません。

* ウェブプラットフォームは、ブラウザー内のセキュリティ制限のためネイティブソケットアクセスをサポートしていません。したがって、ウェブでは ICMP ping や [UnityEngine.Ping](/engine/6000.0/script-reference/unity-engine/ping.md) などの機能もサポートしません。

### グラフィックスの制限##networking-limitations

WebGL グラフィックス API のウェブプラットフォームには、いくつかの制限がありますが、これは OpenGL ES グラフィックスライブラリの機能に基づいています。詳細については、[ウェブグラフィックス](/engine/6000.0/manual/platform-specific/webgl/develop/graphics.md)を参照してください。

### オーディオの制限事項##graphics-limitations

ウェブビルドでは、**Web Audio** API に基づいてオーディオにカスタムバックエンドを使用しますが、これは基本的なオーディオ機能しかサポートしません。詳細については、[ウェブのオーディオ](/engine/6000.0/manual/platform-specific/webgl/develop/audio.md)を参照してください。

### コードの動的生成##audio-limitations

ウェブは AOT プラットフォームであるため、`System.Reflection.Emit` を使用したコードの動的生成はできません。これは、他のすべての IL2CPP プラットフォーム、iOS、ほとんどのコンソールで同じです。

## マルチスレッドサポート##multithreading-supportscrollpoint-id=multithreading-support-/

Unity はネイティブ C/C++ コードのマルチスレッドサポートを提供していますが、WebAssembly の制限により、ウェブプラットプラットフォームはまだ C# マルチスレッドをサポートしていません。つまり、ウェブプラットプラットフォームを使用してビルドされたアプリケーションは、単一の C# スレッドで実行する必要があります。

**ノート**:

* ウェブプラットフォームは、Web Player の設定で [Native C/C++ support](/engine/6000.0/manual/platform-specific/webgl/develop/class-player-settings-web-gl.md#multithreading) を有効にした場合にのみ C/C++ マルチスレッドをサポートします。

* ドキュメントが安全なコンテキスト内にある場合、ウェブプラットプラットフォームはマルチスレッドをサポートします。

  以下の HTTP レスポンスヘッダーは、サーバーによって設定する必要があります。

  * [Cross-Origin-Opener-Policy: same-origin](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy)
  * [Cross-Origin-Embedder-Policy: require-corp](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy)
  * [Cross-Origin-Resource-Policy: cross-origin](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Resource-Policy)

ウェブプラットフォームで複雑な非同期タスクを実行するために推奨される方法は、コルーチンを使用することです。詳細については、[コルーチン](/engine/6000.0/manual/scripting/object-oriented-development/coroutines.md)のドキュメントを参照してください。

以下の要因によって、マルチスレッドのサポートが制限されています。

### ネイティブスタックスキャンの制約##physics-limitations

ウェブプラットフォームは WebAssembly を使用しています。これは、Unity コードをウェブブラウザーで安全かつ効率的に実行するためのバイトコード形式です。ウェブブラウザーは、ネイティブの WebAssembly スタックへの直接アクセスをブロックし、安全で分離された環境でコードを実行するように設計されています。ウェブガベージコレクターは、他のプラットフォームで複数のフレームにわたってインクリメンタルに実行されるのとは異なり、各フレームの終了時に 1 回だけ実行されるため、これはマルチスレッドのガベージコレクションに影響します。

### スレッドシグナリングの先行サポートがない##dynamic-generation-of-code

バックグラウンドワーカーは、ウェブ上で互いに独立して並列にコードを実行します。ネイティブプラットフォームでは、メインスレッドが他のスレッドに同期して信号を送り、ガベージコレクションを一時停止できます。ウェブではこの同期シグナリングがサポートされていないため、WebAssembly でコンパイルされた C# コードを複数のスレッドで実行することができません。

## ビルドと実行の制限##build-and-run-limitations

Unity は、基本機能のみを備えたウェブサーバーを使用して、**ビルドと実行** (メニューで **Edit** > **Build Profiles** > **Build and Run** を選択) で作成されたウェブビルドをホストします。

このサーバーはデータ キャッシュをサポートしてないため、以下のものに影響します。

* `.data` ファイル ([AssetBundles](/engine/6000.0/manual/working-in-unity/assets-and-media/asset-workflow/asset-bundles-intro.md) または [Addressables](https://docs.unity3d.com/Packages/com.unity.addressables@latest?subfolder=/manual/index.html) を使用しないビルドのすべてのシーンとアセットを含みます)。
* Addressables ファイルと AssetBundle ファイル。

## 追加リソース##additional-resources

* [安全なコンテキスト](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts)
* [ガベージコレクション](https://docs.unity3d.com/2023.3/Documentation/Manual/webgl-memory.html#garbagecollection)
