東京本社のGです。
UnityがWebGLに対応してから、そこそこ時間が経ちましたが、WebGLに関する日本語の情報が比較的少ないような気がする今日この頃です。
本日は私が行った範囲でではありますが、Unity WebGLで「出来ないこと」を纏めて行きたいと思います。
バージョンはUnity 5.3.2f1となっています。
基本的な情報
WebGL での開発を始めるにあたって
http://docs.unity3d.com/ja/current/Manual/webgl-gettingstarted.html
その他、基本的に知っておくべき情報はUnityマニュアルの
プラットフォーム別情報 → WebGL → WebGLでの開発を始めるにあたって
の子ノードを展開することで確認することが出来ます。
また、ブラウザを動作プラットフォームとする都合上
プラットフォーム別情報 → WebPlayer
http://docs.unity3d.com/ja/current/Manual/Web.html
と共通する項目もありますので、この子ノード以下にも目を通したほうが良いかと思います。
Unity WebGLで出来ること
Unityに備わっている、アプリ出力で出来る多くの基本的な項目は利用することが出来ます。
・グラフィック描画(3D/2D)
・入力の受け取り(キーボード/マウス)
・サウンドの再生、停止などの基本的な操作
・HTTP/HTTPS通信(WWWクラスのみ)
・アセットバンドル
など。
Unity WebGLで出来ないこと
前述の通り、多くのことが出来るUnityのWebGLですが、プラットフォームがブラウザであるという都合上、どうしても避けられない問題が幾つかあります。
またプラグインを作成し、HTML5仕様に沿った挙動を実装すれば回避することが出来るものもありますが、JavaScriptとHTML5に習熟している必要があります。
●通信がHTTP/HTTPS以外使うことが出来ない
一応、FTP通信も行うことが出来ますが、こちらは受信のみ可能です。
またUnityEngine.WWWクラス以外のネットワーク機能は基本的に利用することが出来ません。
●通信データをストリーム形式で利用できない
通信はHTTPレスポンスが完全に戻りきるまで、データを利用することが出来ません。
つまりダウンロードを行いながらすでにダウンロードが終わっている部分は利用する、などといったことは出来ません。
●同一ホスト内のデータしかアクセスすることが出来ない
基本的にWWWクラスで読み込めるデータは、同一ホスト内のデータである必要があります。
これはWebGL版でのWWWクラスの実装がXMLHttpRequest によるもので、XMLHttpRequestがセキュリティ上の問題として同一オリジンポリシーに従うことに起因するものです。
これに関してはUnity側での対応で解決することが出来ず、同一ホスト内にデータを配置するか、Cross-Origin Resource Sharing (CORS)をサーバ側に正しく設定することで解決する事ができます。
●スレッドを利用した処理を行うことが出来ない
スレッドが使えません。
但し、基本的にUnityEngineのクラス群はメインスレッド以外での動作は行えないようになっています。
どうしても似たような処理をする必要がある場合、コルーチンを利用するなどで回避することが必要です。
●ファイルシステムが存在しないため、ファイルやディレクトリを使えない
ブラウザからファイルにアクセスするための手段がないためです。
これらは今後のHTML5関係の技術仕様が追加されることで、解消される可能性があります。
現状で対処する場合、Indexed DBなどで仮想ファイルシステムを作成するなどすれば、仮想的にファイルシステムを構築することが可能です。
●キーボードから日本語入力が出来ない
uGUIの入力フィールドにキーボードから日本語入力が出来ません。
これはそもそもIMEをブラウザが制御しているため、アプリ側からIMEを制御する手段がないためです。
HTMLのTextFieldなどで代用する、などで対処する必要があります。
最後に~
上記の不可能なことについてはあくまでも「調べた段階で」不可能ということです。
今後、ブラウザやHTML5の拡張、またUnity側の対処によってこれらが可能になるかもしれません。
アプリでもブラウザでも何も考えずに同一ソースでビルドできる日はまだ遠そうですが。