グラフィックスとか数学…etc

勉強したことのまとめを書きます~.Qiitaはこちら→http://qiita.com/muripo_life

Unity 5.3 & Web GL/HTML5 セミナー by Unity & Mozillaに行ってきた。

kenjin.unity3d.jp

上のイベント行ってきたので

まとめてみました+勉強

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)

LLVM-IR仮想機械をターゲットとした中間言語

↓(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を選択.

オーディオ

周辺機器

ゲームパッドは、FirefoxGoogle 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/