好き勝手に・げーあにん?

ファミコンと同い年の社会人ヌルオタの日記

Unite Japan 2013 の2日目に行ってきた

UNITY - Unite Japan タイムテーブル

1日目に続いて、個人的な思い出し用箇条書きメモの2日目版。かなり意訳。意訳しすぎて間違いを書いている可能性大。私以外が読むことはあまり考えていない。

Mecanim 徹底解説 & 最新機能アップデート

資料はUnityのAssetStoreにアップされる予定らしい。

デモ多めで下記のようなことをやってた

  • アニメーションのミラーリング(?)
  • Stateマシンの推移を記録できる機能
  • ブレンディングピボット
    • ステートの変わる際のモーションブレンドをあわせやすいツール
  • Scriptでアニメーションを制御
    • フェンスをくぐり抜ける(Colliderの制御)
    • フェンスに手をついて飛び越える(手の位置をフェンスの高さに合わせえう)
  • Runモーション&ダメージ走りモーションをブレンドするデモ
    • 設定したパラメータでブレンドするモーションを設定したりするデモ
  • 武器(大砲)を担ぐアニメーションを適用させるデモ
    • {Emptyのステートを作って大砲をかつぐモーションとTransitionを繋いでいたのがなんでなのかわからなかった……}
    • 武器を手の位置に合わせる(IK)
    • 武器を担ぐモーションをどこの骨に適用するかのマスクをMecanimで設定

Unity でのメモリープロファイリング

プロファイラの新機能紹介
  • Unity4.1でDetail memory Viewが入った
  • Unity4.2でメモリのリファレンスViewが追加される(指定のメモリがどのAssetやオブジェクトが参照されたものなのかわかる)
Unityで使われるメモリ
  • Mono
    • ScriptObject
    • GCされる
  • Unity internal
    • GCされない
    • UnusedAssetなどを呼ばないと開放されない
Monoの断片化対策

Unityに限らず、C#で断片化を防ぐためにできることとだいたい同じ。

  • ワークバッファを使う
  • オブジェクトのプールを作るようにする
  • ClassよりもStructを使う
  • OnGUIを避ける
    • かなりメモリを消費する
    • OnGUI() 関数の中身が空っぽでも、呼ばれているだけで OnGUI を呼ぶための準備が内部で呼ばれている事に注意。不要なら関数ごと削除すること。
Dispose() を呼ぶようにするべし

Unity Object wrapperの中には、C#のオブジェクトとしてはサイズが小さくても、Unity上でメモリを大量に使うものがある。

例えば、WWW。

  • GCまかせだと、GC.Collectを呼んでも、Finalizer に入るだけですぐにはメモリが解放されるわけではない
  • www.Dispose() を呼ぶと Finalizer に入らず、すぐにメモリが解放される。

WWW以外の IDisposable が継承されているクラスでも同じ。

AssetBundle
  • ロード
    • WWWでのAssetBundleの読み込みは1つずつ実行すること
      • AssetBundleの展開用に確保されるメモリが複数確保されることを防ぐため
  • ロード直後
    • assetBundle.Unload(false)
      • AssetBundleを読み込んだメモリなどの不要なメモリを解放
    • WWW の Dispose()
  • ロードしたAssetでつくったObjectも不要になった後
    • assetBundle.Unload(true) か UnloadUnusedAssets() で解放

AssetStore マニアクス

Unity仮面。途中で視界が狭いのを理由にマスクを脱ぎ捨てる。
いつも思うんだが、AssetStoreのマシンごとに買わないといけないとか、1つ買えばずっと使えるとか、どこを見ればわかるんだろうか……。

Strumpy Shader Editor

シェーダーをグラフィカルに設定できる。設定したものをExportするとUnityのSurfaceShaderを出力してくれている模様。UnityのShaderの書式がわからないときとかの参考にするのも良いかも。

T:Net: Tasharen Networking

簡単リアルタイム通信アセット。

Input.Touches

タッチ関連のスクリプト集。良いよね。

Bitmap2Material

タイリングを自然にしてくれるアセット?
フルバージョンはお高いが、フリー版もあるっぽい

Easy Save2

プレーヤーデータのセーブ。
File、PlayerPref、Webへのセーブが可能(他にもある?)。
Webへのセーブは、MySQLPHPを使用するサーバープログラムが付属しているらしい。

Webセーブとか、暗号化を手っ取り早くしたいなら良いかも。

iPhone でリアルタイムマルチプレイを実現! Photon Network Engine

ダンジョンズ&ゴルフPhoton Network Engine採用事例的なセミナー。

WindowsServer向け。サーバープログラムはC#で。

  • UnityのNetworkクラス
    • クライアントのうち1台がホストになる仕様(?)
    • UnityのNetworkクラスの利便性は良い
  • Photon Network Engine
    • UnityのNetworkクラスとAPIがほぼ一致
    • Unityで使えそうな同期通信エンジンがあまりない
Photonサーバー概要
  • Photon Cloud
    • 月額課金
  • Photon Server
    • サーバーが必要
    • SDKのソースが公開されており、独自の実装が可能
    • 買い切り

用意されているサービスが豊富。LoadBalanser、MMOなど。

クライアントサイド

PhotonのMonoビヘイビアを継承してアプリ側の処理を実行する。
PhotonNetwork.Instantiate でネットワーク上でのキャラ(などのPrefab)が生成されたことになる。

RPC、ダンゴルではJSONで送受信している。
Photonでは標準でオフラインモードが実装されている。

今のところマルチプレイで問題が起こっていない。非常に安定している。

Unity Hacks

AngryAnt.com に以前のセミナーの資料などがある。今回のもUnite Asiaツアーが終わったらアップされるとのこと。

いろいろデモを交えつつだった。資料がアップされたら見る。

AssetStore マニアクス 2nd

Etceteras Plugin

iOSAndroidでそれぞれ別のAsset。

Web View、mail、アラート、SNS(Facebook, twitter)、カメラアクセス、promptへのUnityからの操作。

Cutscene Creator uSequencer

カットシーンエディタ

Playmaker

スクリプトが書けなくても、GUIでステート制御の設定ができる。

http://u3d.as/content/freakow-/rage-spline/1DK:title=Rage Spline]

スプライン曲線から2Dゲーム用のPhysicsを生成したりしてくれるエディタ。

SmoothMoves

2Dのパーツアニメーションエディタ。

PoolManager

その名の通り、PoolのManager。PrefabのPoolを作成して制御。買うほどのものか?と思ってしまうんだけど、なんか評価高い。

FX Maker

Effect作成。
『300 Effect, 300 Texture, 100 Mesh, 100 CurveAni』もの数のリソース入り。これそのものだけで結構な価値を感じる。

2日間を終えての感想

日記に書いてなかったけど、Unityのセミナーに行くのはこれで2回目だった。日本で発表されるUnityでの開発事例って、ネイティブアプリのソシャゲぐらいの規模のものが多くて、もっとハイエンドな3Dグラフィックの事例とかあったら、聴く方は面白いんだけどなーとか思ったり。日本では3Dゲームのエンジンとしてあんまり使われてないんじゃないかという錯覚に陥る。そんなことはさすがにないと思うんだが。

他の見たいものと被ってていけなかったけど、任天堂協賛のセッションとかどんな感じだったんだろうか。

特にまとめとかなく、ゆるっとした感じで終わり。