【Unity】Webアプリで実行できないこと

UnityのWebGLプラットフォームでは、他のプラットフォームとは異なる制限や非対応の機能がいくつかありますは

代表的な非対応機能の一覧

  1. マルチスレッド処理
    • WebGLではマルチスレッドがサポートされていません。すべてのコードは単一のスレッドで実行される必要があります。
  2. ファイルシステムアクセス
    • WebGLではローカルファイルシステムへの直接アクセスが制限されています。Webブラウザのセキュリティモデルにより、ユーザーのファイルシステムへの直接アクセスは制限されます。
  3. System.IO機能
    • UnityのSystem.IO名前空間を使ったファイル操作は制限されています。WebGLではファイルの読み書きがサポートされていないため、代替手段(例:PlayerPrefsやWeb APIの使用)が必要です。
  4. .NETライブラリの制限
    • 一部の.NETライブラリや機能がWebGLプラットフォームではサポートされていません。特にリフレクションや一部のアセンブリ機能に制限があります。
  5. ネットワーク機能の一部
    • Unityの一部のネットワーク機能(例:低レベルのネットワーキングやソケット通信)はWebGLでは利用できません。WebSocketやHTTPリクエストを使用する必要があります。
  6. スレッドプール
    • スレッドプール機能が利用できません。すべてのタスクはメインスレッドで処理されます。
  7. 一部のレンダリング機能
    • 一部の高度なレンダリング機能やシェーダー機能はWebGLで制限されています。特に、Compute ShaderやTessellation Shaderはサポートされていません。
  8. サウンド処理の一部
    • Unityのサウンド処理機能の一部が制限されています。特に、低レイテンシのサウンド再生が難しい場合があります。

これらの制限を考慮して、WebGL向けのUnityプロジェクトを設計する際には適切な代替手段やアプローチを選択することが重要です。

ネットワーク機能(NetCode)について

UnityのNetCode(ネットワーク機能)について、WebGLプラットフォームにはいくつかの制約があります

WebGLでのNetCode使用に関する主な制限事項です

  1. WebGLでは低レベルのソケット通信のサポートがなし
    • WebGLでは低レベルのソケット通信がサポートされていません。代わりにWebSocketを使用する必要があります。WebSocketはブラウザのセキュリティモデルに従って動作します。
  2. UDPサポートなし
    • WebGLではUDP通信がサポートされていません。TCPベースの通信またはWebSocketを使用する必要があります。
  3. マルチスレッドサポートの欠如
    • マルチスレッドがサポートされていないため、スレッドを利用した並行処理やバックグラウンドタスクの実行は困難です。すべてのネットワーク処理はシングルスレッドで行う必要があります。
  4. ライブラリの制約
    • 一部のネットワーキングライブラリや機能がWebGLでは利用できません。特に、低レベルのネットワーキングAPIや一部のサードパーティ製のネットワーキングライブラリは制限を受けることがあります。
  5. セキュリティ制約
    • Webブラウザのセキュリティポリシーに従う必要があり、クロスオリジンリソース共有(CORS)の制約が影響する場合があります。適切なCORS設定が必要です。
  6. NetCode for GameObjects(旧MLAPI)の制約
    • UnityのNetCode for GameObjectsはWebGLで動作しますが、上記の制約に注意が必要です。特に、リアルタイム性が求められるゲームではWebSocketを使った通信設計が重要になります。

対策

WebGLでネットワーク機能を実装する際には、以下の点に注意すると良いでしょう

  • WebSocketの利用
    • WebSocketを使った通信を設計する。UnityではWebSocketSharpなどのライブラリを使用してWebSocket通信を行うことができます。
  • HTTPリクエストの活用
    • 短い間隔でのポーリングや非同期通信にはHTTPリクエスト(例:UnityWebRequest)を活用する。
  • クラウドサービスの利用
    • クラウドベースのバックエンドサービス(例:PlayFab、Photon、Firebaseなど)を利用してネットワーク機能を実装する。
  • ブラウザセキュリティの理解
    • CORSやWebSocketのセキュリティポリシーを理解し、適切に設定する。

WebGLでのネットワーク通信を実現するためには、低レベルのソケット通信(TCP/UDP)を使うことができず、代わりにWebSocketを使用する必要があります。WebSocketはブラウザのセキュリティモデルに従って動作するため、その制約を理解し、適切に実装する必要があります。

これにより、WebGLプラットフォームに適したネットワーク機能を構築することが可能です。

Unity

Posted by hidepon