Unity 5.3 & Web GL/HTML5 セミナー by Unity & Mozillaに行ってきた。
上のイベント行ってきたので
まとめてみました+勉強
Unity Japan
登壇者:大前広樹氏
WebGLについて
- Unity5.2までUnity Web Player→廃止
- Unity5.3からWebGL→推奨
Why?→プラグインを根絶したいから!
Webへの移植はどれくらいできるの?
Unity推奨ブラウザは?
使い方
Buildする場所 【Build Settings】→【Switch Platform】
「No Module loaded」 と出てPlatformの変更が出来ない場合 WebGL自体をインストールしていないので、改めてUnity5のDownloaderを起動し、「WebGL Build Support」にチェックを入れて再度確認する。
【Build Settings】について
- 【Release Build】でBuild→長い
- 【Develop Build】でBuild→短い
【Build & Run】について WebGLを動かすときはBuild&Runを用いる.このとき、Unityは、自分でローカルサーバーを立ち上げてやる
Buildの裏の処理
Build中の処理について(概要)
C#/UnityScriptShaderなど
↓(mcs)
CLI共通言語基盤 (Common Language Infrastructure、CLI) で定義された最も低水準な人間が解読可能なプログラミング言語
↓(IL2CPP)
C/C++Shaderなど
↓(Clang)
↓(Emscripten)
JavaScriptブラウザ表記
IL2CPP:Unity で使われている C# や JavaScript のスクリプトを C++ へ変換して動かしてしまおうという技術
メモリ Unity Heap
メモリーついて
Unity Heapについて
Unituy上で仮想マシンを動かす仕組み(asm.jsで記述)ちなみにMozillaJapanの講演内容はもっぱらこれ
参考Mozilla の開発した asm.js と WebGL が 1 つの到達点へ達しました:ゲームエンジンである Unity が WebGL によるゲームの完全サポートを開始しました
仕様UnityがVMとして確保しているメモリー量はWebGLでは、あらかじめ指定しないとだめ
吐き出したファイルの中 Release/フォルダ index.html TemplateData/フォルダ
Release/フォルダ内gzip圧縮したものがある
メモリー使用量を減らすには?
UnityとWebGLを一気に使うとUnityのメモリー管理とJS側のガーベージコレクションがぶつかる
→AssetBundleWWW クラスを介してアセットをロードし、インスタンス化するもの
内部にはIndexedDB
LZMA圧縮は使わない→LZ4を使おう
ブラウザによってはユーザーの認証を要求
LINK.XML".NET Framework 3.5(C#のサーバーサイドのフレームワーク)において、様々な種類のデータ集合に対して標準化された方法でデータを問い合わせる(クエリ)ことを可能にするために、
言語に統合された機能"
アセッツフォルダーにLINK.XMLを置く
jsのコンソールに「Could not produce class with ID XXX」と出る→YAML Class ID Refrenceを見る
ネットワーク周り
ブラウザーで動くのでソケット関係は動かない
だが、WWW or UnityWebRequestは動く
UNETはWebSocketで動作
WebSockets or WebRTC in JavaScript
コンテンツデリバリー
CORS(Cross-Origin Resource Sharing)ブラウザがオリジン(HTMLを読み込んだサーバのこと)以外のサーバからデータを取得する仕組み
crossdomain.xmlみたいなもの(ただしHTTP)
仕様ポイント
- Unity上で,【Player Settings】→【Publishing Settings】→【WebGL Memory Size】項目の値については,自分のゲームの動作と,対応ブラウザのメモリ許容量を確認しながら,動作に支障が出ない最適の値を検討する.
- メモリ使用量の減らすには【Player Settings】→【Other Settings】→【Optimization】→【Strip Engine Code】項目にチェックを入れる事
- 【Player Settings】→【Publishing Settings】→【Data caching】項目にチェックを入れる
- 圧縮方法については、LZ4の圧縮機能を使う事を推薦
- コードの書き方において、一部は適さないものが存在する
"string hugeString = “”; for(int i = 0; i < 100000; i++) { hugeString += “fool”; }
この様に,i の限界が高過ぎる設定で加算処理を行なうと,大抵コケる(重くなる).
Unity5.3の新機能
コンテンツのサイズの削減
- Assetに関しては,Crunch Textureを使用する.これにより、変換の際に負荷は掛かってしまうが,最適な容量でBuildが可能となる.
- 圧縮において,LZ4 + gzipが可能となった.これは,LZ4圧縮からさらにgzip圧縮を行なう事で,相当量のサイズを削減出来る仕組みとなっている
グラフィックの設定
- Firefoxでは,about: config にて「enable-prototype-webGL2」をフィルターし,true にする事で,実装が可能.
- Unity側では,【Player Settings】→【Other Settings】→【Auto Graphics API】目のチェックを外し,Graphics APIs にてWebGL2.0を選択.
オーディオ
- オーディオは基本的な機能しか使えない
- マイクは現在、未サポート
- 対応ソースについては,http://docs.unity3d.com/ja/current/Manual/webgl-audio.htmlを参照
周辺機器
ゲームパッドは、FirefoxとGoogle Chromeで使用可能
デバッグについて
- WebSocketにて、プロファイラーの接続が可能。その際は、ログがコンソールに出る。ただし使用の際は、AutoConnectProfiler をON にしないといけない。
- 残念ながら、MonoDevelop でのデバッグは現時点では出来ない。
- 【Player Settings】 →【Publishing Settings】→【Enable Exceptions】項目でFullに変更すると、コンソールでエラーが表示される様になる。
- 最初にBuild Settings にて,Development Build にチェックを入れておく
MozillaJapanについて[h1]
登壇者:清水智公氏
MozillaJapanについて
理念
Web is the platform(Webこそがプラットフォームだ!)
未来的な話
Webの辛み:ネットワークがないとコンテンツ使えない
OfflineStatus!(来年):ネットワークが使えなくもある程度使える
asm.jsの話
- jsだが、非常に制限の強いjs
- ams.jsだとjsを型宣言をきっちりできるstringはできない、intのみ配列もできない
- ams.jsはええええええ!!clang,gccよりもはえええ!!
- emscriptenを使おう!Cのポインタ操作もheap操作で行けるよ~
- CをJSでかけるよ~
Single build & sencure execution
emscriptを使ってUnityのWebGL出力をしている
WebAssembly
binaryformat:LispのS式で作っている
その他
unity道場
- 月1−2回、ワークショップを行なう企画。
- 年間で通算で20回以上開催予定
- 平日1回休日1回
- 渋谷dotsで開催予定。
参考ゲーム
HADOWGUN: DeadZone http://mmo-android.com/press/3003/