https://kenjin.unity3d.jp/events/show/307
開演、Unity Technologies Japan 大前広樹登壇
サバイバルシューター https://unity3d.com/jp/learn/tutorials/projects/survival-shooter-project ライトとかも入っている。
・ビルド(Development Build) アセンブリ → C++ → JS → 更に圧縮
Development Buildだと速い。 チェック無しのリリースビルドだとオプティマイズするので時間かかる。(それでも早くなった)
WebGLをビルドするときは、必ずBuild And Run
にして!
Unityが中でレンポラリのWebサーバが立ち上がる。localhost → ブラウザによっては(Chromeなど)HTML5をセキュリティの問題でロードできないことがあるから。
流れ
マニュアルのこと
公式はディテールが詳しい。
Blogにも散らばっていること
将来のこと
PC / Mac / WebPlayer向けの作っている、WebGLに移植→無理 モバイル向けのコンテツを作っているのでWebGLに移植したい→かなりいける
WebGLはエマージングテクノロジですが・・ コンテンツ開発をしてもいいレベルまで来た iPhone5/5Sくらいを対象としているつもりで作りましょう。
5.3の進化ポイント http://blogs.unity3d.com/jp/2015/12/07/unity-5-3-webgl-updates/
メモリ Unity Heap
・吐き出したファイルの中 Release/フォルダ index.html TemplateData/フォルダ
・Release/フォルダ内gzip圧縮したものがある。
asm.jsの仕組み Unituy上で仮想マシンを動かす仕組み。 ・アセット、データのファイルシステム ・メモリ(ヒープ領域) jsgzにUnityのエンジンからはいっているがかなり圧縮してる。 →解凍するとギガバイト単位で持っていくような大きさ
VMが必要とするメモリ量。 → mem.jsgz 確定サイズ「例)VM Wareを使った時のプロセッサとメモリ的なこと」
Web GL memory Size 実際にアロケートするメモリサイズ
小さければちいさいほうがいいけど足りなくなるかも? 大きすぎるとブラウザがと
ヒープ アセットデータ コンパイル
○メモリ使用量を減らすには? Strip Engine Code AssetBundleを使う
最適化
Optimization
→ Strip Engine Code 使ってないものをCレベルで削る
JS側 GCについて でかいstringを作り続けるみたいな処理。 ヒープのwarking memoryがなくなってしまうような処理ではコケる
AssetBundleを使う Indexed DBというHTML5の新しい機能を使っている。 ブラウザによっていはユーザの認証を要求する。(Indexed DBにアクセスするけどよいか?) Publishing settingのをON LZ4を使おう!(LZMA圧縮を使わない、圧縮率はいいがdecompress時にブロッキングが発生される)
LINK.XMLというファイル Strip Engine Codeでストリッピングされるが、AssetBundleで使うようなもの。
Could not produce class with ID XXX
JSのconsoleに出る。 XXXについて YAML class ID Reference http://docs.unity3d.com/ja/current/Manual/ClassIDReference.html
大体はColliderとかが多い。 LINK.XMLに記載してストリッピングさせないようにしたり出来る。 → その代わりサイズが大きくなるが。
動的なコード生成、リフレクション使っているとJSではできない。
Strip engine code Crunch Texture 5.1 or 5.2くらいから使えるようになった。
アセットバンドルはLZ4 & gzipが可能 → Webサーバも対応させて設定しておく おすすめ。
コンテンツは仮想ファイルシステム オンメモリに乗るなら速いので基本的に圧縮設定している。 オンデマンドでヒープに載せて動く。メモリに載ってる際はすでに圧縮済み。 gzip 転送ができるのはあくまで .htaccess によって設定できる環境 http://tips.hecomi.com/entry/2014/12/08/002719
.htaccessに置けない場合 勝手に展開してくれる。 http://docs.unity3d.com/ja/current/Manual/webgl-building.html
ネットワーク
System.NET.SocketやUnityEngine.Network*は動作しない WWWやHttpWebRequestを使おう。 内部的にはXMLHttpRequestを使っている。ブラウザの処理 UNETはWebSocketで動作
Development Build → ログがコンソールに出る Profilerの選択が可能(Development Buildで接続) ProfilerにてWebSocket経由で接続する。 「Auto Connect Profiler」をONにする。 Debug.LogやConsole.WriteLine Enable ExceptionsにてAllとかで。 Minifyとかで人間が読めなくなる。 DevelopmentBuildにてビルドしたら人間が読めるようなコードになる。 スタックトレースも見やすくなる。
OpenGL ES 2.0レベル(WebGL 1.0) WebGL 2.0をサポート自体はしている。 Auto Graphics APIを外せば2.0選べる。 セキュリティ制限のせいで特定の方法でしかアクセスできないなどがある。E Graphics API Levelを設定 げんようFirfoxのabout:configにて動作舗装はしないがWebGL2選べる
・プラグイン モジュールというものをJSの中で書いて。 [DLLImport(“__Internal”)] で呼べる。
IL2CPPのおかげで Assets/Plugins/WebGL/MyPlugin.cでそのままC呼べる。 エンスクリプティング DLLみたいなようにライブラリを埋め込める。 Unityとエンスクリプティングのバージョンを一緒にする
・オーディオ AudioClip AudioListener フィルターを掛けたりはできない AudioClip.Createだとストリーミングしない前提なら出来る。 ChromeとFirefoxのみゲームパッドを使える。まだSafariはだめ
ChromiumThread Webアセンブリで更に半分? → デリバリーサイズが小さくなるし、一時的にガツンと取るのも解消される。
Firefoxはフルスクリーンを受け付けないことがある。 iFrameの中にコンテンツを入れるとキャッシュを使えなくなることがある。
http://blogs.unity3d.com/jp/2015/12/15/updated-webgl-benchmark-results/
コンパイル結果をキャッシュするので。
IE→Windows10つかってね、Edgeつかってね。
Mozilla Japan 清水智公様
Proudly non-profit 非営利 アフィリエイトで食ってる
Web is the platform. Webこそがプラットフォームだ ※the(aではない)。
・HTML5 JSが触れるセットが増えている。オープンスタンダードな。
Can I use
http://caniuse.com/ こんなのがあるのねがわかる。
製品機能をシェアしてみんなで使っていこう。実装は実装力や優先度にかかっている。
・カメラで共有 https://is.gd/html#5139
最大150人。 Androidでも動くと思う。 iPhoneはこの機能は使えない。
拡散がしやすい。
アプリケーションをインストールしなくても切り替えができる。 試してもらう敷居がすごく下がる。
PluginやFlashを根絶
○ゲームパッド キーは基本的にハンドリングだが、
ポーリングすることになっている。 フレームを途中で通るようになっている。
Random JSでプロキシ データのビューみたいなのも出来る。
演算子のオーバーロードはできない 浮動小数点、整数(Unsigned、signed) 32ビットはあるが
asm.js
制限の強いJS n|0 → 型を決める。
1 | 0 → 1 or 0
LuaをJSの上で動くものとか。
emsripten
emccはコマンド
emcc -o index.html -03 helloworld.c C言語をJSに変換できる
WebAssembly
binary format
S式のバイナリにしたものを持ってくる。
ダイナミックリンクのサポート
来年の前半くらい? オーディオの処理 オーディオプロセッシングはできるがワーカーではできないが、出来るようになる。 ゲーム用のデバッガーを作るというバグ
MozVR
Unity道場
1月は1回? 4月は少なめ