UnityのWebGL出力について
自社サービスのフロント部分をUnityで開発していた、ある日のこと。
(今年の3月あたりの話になります)
「ブラウザで動したらいいのでは?」という話が出てきました。
その時に調べた内容をメモとして残しておきたいと思います。
Unityで開発したものを、ブラウザで動作させる場合2つ方法があります。
・UnityWebPlayer
こちらは、プラグインをブラウザにインストールして動かすタイプです。
所謂Flashみたいなものですね。
言語はJavascriptで、ブラウザからGPUを操作し、Canvasに描画します。
今回はWebGLについてです。
実は、Unity5.3.3からWebGL出力ができるようになりました。
ただし、WebGL出力の機能はプレビュー版となっていて正式リリースではありません。
また、Unityの公式ページではモバイル端末は未サポートとなっています。
以下、Unity公式ページから抜粋になります。
http://docs.unity3d.com/ja/current/Manual/webgl-browsercompatibility.html
Unity WebGL コンテンツは現在モバイル端末ではサポートされていないことに注意してください。一部端末、特にハイエンドなものでは動くかもしれませんが、大抵の端末は性能不足で Unity WebGL を十分に動かすだけのメモリがありません。
早速、自社サービスで作成していたパズルゲームをWebGL出力して、PC版Chromeで確認したところ、ほぼ完璧な動きをしていました。
問題は、Arialフォントの文字列が描画されないことくらいでした。
(Arial=動作環境のデフォルトフォント)
この問題は、Fontデータも一緒にビルドして組み込んだFontを使用することで解決します。
また、サーバー上に配置したアセットバンドルを読み込むことができます。
実は、自社サービスはスマートフォンがターゲットとなっています。
なので、PCで動いただけでは喜んでいられません。。。
さっそく、本命のAndroid版のChrome(Nexus5)で動作確認してみました。
・・・結果は、残念なことになりました。
動くこともあれば、動いたとしてもエラーも吐かずに固まってしまったり、
何も表示されないまま固まってしまうなど不安定な動きとなっていました。
Nexus5くらいの性能ならば動くと信じたかったのですが、残念です。
まとめとして、UnityのWebGLはPCブラウザで動作させるには問題がないことが解りました。PCのブラウザ向けにリッチなコンテンツを開発するのにむいているのではないでしょうか?
また、ざっくりとした説明になりますが、UnityのWebGL出力はemscriptenを使用しています。
emscriptenとは、c,c++からLLVM生成して、それをJavaScriptに変換するコンパイラになります。つまり、コンテンツをc,c++で開発をしておけば、PCアプリ、スマートフォンアプリ、Webアプリでも同じコードで済みます。
今後、emscriptenがWebアプリの開発にどう影響を与えていくか気になります。
最後に、UnrealEngine4でもWebGL出力が可能になっていましたので調べてみましが、結果はUnityと同様結果でスマートフォン環境では厳しいという結果になりました。
著者:ai