技術的制約
Details the technical limitations of the Web platform.
読み終わるまでの所要時間 11 分最終更新 1ヶ月前
ウェブブラウザーで実行するように設計された Unity のウェブアプリケーションには、ウェブテクノロジーによる制限が課せられます。ウェブプラットプラットフォーム用のアプリケーションをビルドする前に、以下の技術的な制限を確認してください。
プラットフォームのサポート
ほとんどの一般的なデスクトップブラウザーのバージョンは、Unity ウェブコンテンツをサポートしていますが、ブラウザーによってサポートレベルが異なることに注意してください。
ウェブビルドにおいては、プラットフォーム自体の制約により以下の機能を使用できない、または制限されている場合があります。
Visual Studio でウェブビルドのデバッグがサポートされていない
ウェブビルドのデバッグは Visual Studio ではサポートされていません。詳細は、ウェブビルドのデバッグとトラブルシューティングを参照してください。
Unity キャッシュとキャッシングスクリプトがサポートされていない
ブラウザーでファイルシステムへのアクセスが制限されているため、ウェブビルドでは Unity Cache と Caching Scripting API をサポートしていません。アセットデータおよび AssetBundles に対するネットワークリクエストは、代わりにブラウザーキャッシュへキャッシュされます。ウェブのキャッシュ動作を参照してください。
スレッドがサポートされない
JavaScript にスレッドサポートがないため、スレッドはサポートされていません。これはパフォーマンス向上のための Unity の内部的なスレッド使用にも、スクリプトコードやマネージ DLL でのスレッド使用にも適用されます。基本的に、 名前空間の要素はサポートされません。
System.Threadingネットワークの制限
ウェブプラットフォームでサポートしていないネットワーク機能がいくつかあります。
-
ブラウザーではセキュリティ保護のため、ネットワーク機能で IP ソケットに直接アクセスすることができません。詳細は、ウェブネットワークを参照してください。
-
名前空間内の .NET ネットワーククラスはサポートされません。
System.Net -
ウェブプラットフォームは、ブラウザー内のセキュリティ制限のためネイティブソケットアクセスをサポートしていません。したがって、ウェブでは ICMP ping や UnityEngine.Ping などの機能もサポートしません。
グラフィックスの制限
WebGL グラフィックス API のウェブプラットフォームには、いくつかの制限がありますが、これは OpenGL ES グラフィックスライブラリの機能に基づいています。詳細については、ウェブグラフィックスを参照してください。
オーディオの制限事項
ウェブビルドでは、Web Audio API に基づいてオーディオにカスタムバックエンドを使用しますが、これは基本的なオーディオ機能しかサポートしません。詳細については、ウェブのオーディオを参照してください。
コードの動的生成
ウェブは AOT プラットフォームであるため、 を使用したコードの動的生成はできません。これは、他のすべての IL2CPP プラットフォーム、iOS、ほとんどのコンソールで同じです。
System.Reflection.Emitマルチスレッドサポート
Unity はネイティブ C/C++ コードのマルチスレッドサポートを提供していますが、WebAssembly の制限により、ウェブプラットプラットフォームはまだ C# マルチスレッドをサポートしていません。つまり、ウェブプラットプラットフォームを使用してビルドされたアプリケーションは、単一の C# スレッドで実行する必要があります。
ノート:
-
ウェブプラットフォームは、Web Player の設定で Native C/C++ support を有効にした場合にのみ C/C++ マルチスレッドをサポートします。
-
ドキュメントが安全なコンテキスト内にある場合、ウェブプラットプラットフォームはマルチスレッドをサポートします。以下の HTTP レスポンスヘッダーは、サーバーによって設定する必要があります。
ウェブプラットフォームで複雑な非同期タスクを実行するために推奨される方法は、コルーチンを使用することです。詳細については、コルーチンのドキュメントを参照してください。
以下の要因によって、マルチスレッドのサポートが制限されています。
ネイティブスタックスキャンの制約
ウェブプラットフォームは WebAssembly を使用しています。これは、Unity コードをウェブブラウザーで安全かつ効率的に実行するためのバイトコード形式です。ウェブブラウザーは、ネイティブの WebAssembly スタックへの直接アクセスをブロックし、安全で分離された環境でコードを実行するように設計されています。ウェブガベージコレクターは、他のプラットフォームで複数のフレームにわたってインクリメンタルに実行されるのとは異なり、各フレームの終了時に 1 回だけ実行されるため、これはマルチスレッドのガベージコレクションに影響します。
スレッドシグナリングの先行サポートがない
バックグラウンドワーカーは、ウェブ上で互いに独立して並列にコードを実行します。ネイティブプラットフォームでは、メインスレッドが他のスレッドに同期して信号を送り、ガベージコレクションを一時停止できます。ウェブではこの同期シグナリングがサポートされていないため、WebAssembly でコンパイルされた C# コードを複数のスレッドで実行することができません。
ビルドと実行の制限
Unity は、基本機能のみを備えたウェブサーバーを使用して、ビルドと実行 (メニューで Edit > Build Profiles > Build and Run を選択) で作成されたウェブビルドをホストします。
このサーバーはデータ キャッシュをサポートしてないため、以下のものに影響します。
- ファイル (AssetBundles または Addressables を使用しないビルドのすべてのシーンとアセットを含みます)。
.data - Addressables ファイルと AssetBundle ファイル。