万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

Unity 5.3 & Web GL/HTML5 セミナー by Unity & Mozilla

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だと速い。 チェック無しのリリースビルドだとオプティマイズするので時間かかる。(それでも早くなった)

Firefoxゲームパッドを指すと落ちる確率が高い?

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だとストリーミングしない前提なら出来る。 ChromeFirefoxのみゲームパッドを使える。まだ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はこの機能は使えない。

拡散がしやすい。

アプリケーションをインストールしなくても切り替えができる。 試してもらう敷居がすごく下がる。

https://www.humblebundle.com/

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月は少なめ