第一回 渋谷Unity勉強会xコロプラUnity事例発表メモ

・Unityとコロプラ
Unity最初のゲーム → きらきらドロップ! 40万DL位
月1でアプリを出そう。
タップサム!
the 射的! → 180万DL位
月3本のリリースを目指しチームをビルド中。現在8人。数カ月で30人体制に。


スマートフォンとUnityのTips
Draw Callを減らす。
30以下を目指す。
動かないオブジェクトはstaticに。
モデルデータは分割しないように。
GUI Textureはなるべく使わない。


・メモリを節約しよう
国産端末、メモリ少ない。AQUOS PHONEとか。AQUOS PHONEでテストするべき。
prefabの静的紐付けに注意。起動時にメモリ読み込みしてしまう。起動に時間がかかる。
適時Resources.Loadに。


・サイズ削減
Androidで13MBをゴールに。
EditorLogで大きいものから確認を。→ Editor.log の Used Assets, sorted by uncompressed size:


・演出で工夫
射的でくまが振り向いてプライズを隠して Resources.Load
コインプッシャーが引いた時にGCGCのタイミングに注意。


・質問
EZ GUIも問題いっぱい。


・GGJ2012 ポストモーテム
SPLIT SCENE。SceneOverlay。高橋さんのやつ。

アニメーションのついたFBXをUnityに持ってきた時に発生するアニメーションの誤差

Maya等からUnityにアニメーションのついたFBXをインポートした場合、デフォルトではKeyframeがReductionされる。
そのせいで若干誤差が出てその誤差が気になる場合がある。


これを解決するにはUnityのProjectビューからそのFBXを選択し、FBXImporterのAnimation Compressionの項目の値を変更する。
Anim.CompressionはデフォルトでKeyframe Reductionになっている。
これをOffにするとMayaから出力したFBXのKeyframeをそのままインポートするので高精度になるが、パフォーマンスが低下しファイルサイズと使用メモリサイズが増大するので
このオプションを使用するのは推奨されていない。
Anim.CompressionをKeyframe Reductionにしている場合は、その下にある、
Rotation Error、Position Error、Scale Errorに値を設定する事で(デフォルトは0.5)、どれだけ各curvesを切り詰めるか設定できる。


参考 http://unity3d.com/support/documentation/Manual/Meshes.html

Unity User Meetup 2011のメモ

Unity User Meetup 2011に行って来たので、その時のメモ。


●Unit 3.5の紹介(大前さん)
・ナビゲーションメッシュ
群衆シミュレーションみたいな物も手軽に作れるかも。
いじってるだけで楽しそうだった。


・LOD
LODGroup → LODのレベルが簡単に切り替えられる。
1つのモデルの切り替えもできるし、LODのレベル毎に自前で用意したモデルで切り替えることも可能。
どのくらいの距離でLODを切り替えるかはInspectorからバーみたいなので簡単に切り替えられる感じ。


・マルチオブジェクト編集
複数のオブジェクトをまとめて編集。


・Prefabの扱いの改善
PrefabいじってもPrefabのリンクが切れない。(切れにくい)


・テキストベースのPrefab
YAML形式に。
diffが取れるようになる。
ただdiffが取れると言っても衝突してもいいよというわけではない。内部構造知らないと?
セミナーではPrefabについてしかなかったんですが、懇親会でSceneも同じくYAML形式になる。


Shuriken
新しいパーティクルエディタ。


Webカメラとマイクのサポート
マテリアルのテクスチャとして使う。MovieTextureとほぼ同じ。
WebCamTextureというやつ。


GPUプロファイラ
かなり細かいGPUプロファイリング。
ポストプロセスにどれくらいかかってるかとか、MainCameraの描画でどれくらいかかっているかとか。


・ローレベルスクリプトアクセス


・オクルージョンカリング
今までの50倍くらい速くなった。しかも今までのバージョンにはバグがあった。


・ガンマコレクション


・マルチスレッドレンダリング&メモリ管理の改善
1.3倍〜2倍。


・年末までにくるといいなぁ
現在絶賛デバッグ中(β3)。年内には間に合わないかもしれない。


●ちょっとしたUnityの使い方(今給黎さん)
GREEも開発している。
吹出し的なものの話?


●Unity と Arduino(高橋さん)
Arduinoフィジカルコンピューティング
Unityでどう使うか。Wiiのヌンチャク入力デバイスとして使ってみる。
ヌンチャクの挙動を読み取るライブラリは既にある。
それとUnityを繋げて制御できるのでは?→使える。
UnityでWiiのヌンチャクが使えてしまう!パワーグローブも。
Unity(ソフトウェア制御)にArduino(ハードウェア制御)が加わり最強に見える。
色んなハードをUnityで使えるかも。夢が広がる。


●パネルディスカッション
ユーザー動向(今日来た100人のうち)
使っているUnity → Unity Proが多い。
iOSよりiOS Pro版が多い。
Android版よりiOS版の方が多い。
Asset Server使ってる人8人くらいしかいない。
ブランチ切れない。
Unityの経験
3ヶ月くらいの人たちが一番多い。


・日本語フォントどうするか
モバイルのダイナミックフォントは実はShadowgunで作った。3.5には入らないけどそれ以降には入るかも。
しかし、ダイナミックフォントだとライセンスの問題が。

・マルチ言語対応
Asset Storeにいいやつがある。 → Localization Package。超便利そう。


・ビジュアルスクリプティング
実際の制作に使っている事例はなかなか聞かない。


・その他アセットの話とか
EZGUIとex2Dを組み合わせて使ってる人も。
Enhanced Editor++のRememberer、Strumpy Shader Editor、Mixamo Animation Store。

Unityでストリーミングムービー再生

ストリーミングムービー再生する場合は、www.movieを使います。

using UnityEngine;
using System.Collections;

public class ControlStreamingMovie : MonoBehaviour
{
  public MovieTexture movieTexture;

  private static readonly string url = "http://www.unity3d.com/webplayers/Movie/sample.ogg";

  void Start()
  {
    StartCoroutine(LoadMovie());
  }

  void Update()
  {
  }

  IEnumerator LoadMovie()
  {
    WWW www = new WWW(url);
    movieTexture = www.movie;

    while (!movieTexture.isReadyToPlay) {
      yield return null;
    }

    guiTexture.texture = movieTexture;
    audio.clip = movieTexture.audioClip;
    movieTexture.loop = true; // ループ
    movieTexture.Play();
    audio.Play();
  }
}


今回もGUITextureに貼りつけてみました。
上のスクリプトとAudio Resourceコンポーネントを適当なGUITextureに適用すれば動くと思います。
ムービーの形式はOggTheoraじゃないといけない事に注意。

Unityから直接Visual Studio Expressを起動する

会社でUnity ProとVisual Studio Professionalの組み合わせで使ってる時は気にならなかったんですが、
家で、Unity ProとVisual Studio Expressの組み合わせで作業した時に、Unity PreferencesのExternal Script EditorでVisual Studio Expressを設定しても、
UnityのProjectとかConsoleからダブルクリックで直接Visual Studio Express上でスクリプト開けねーって事に初めて気づきました。


Visual Studio C# Integration
この辺参照。


流石に、毎回プロジェクトファイルからVisual Studioを立ちあげるのは面倒臭いので何か手はないかなぁと探していたら、


Using Visual C# Express As the code editor
ここにその解決法が載ってました。


そこに載っている、 ClassExecを使う方法と使わない方法両方で試しましたがどちらの方法でもいけました。(Windows7環境)
Assets->Sync VisualStudio Projectってなってる所は、Sync MonoDevelop Projectのような?

Unityエンジニアセミナー

Unityエンジニアセミナーに行って来ました。
その時のメモ。



・大前さん
世界で80万人が利用。
日本語のドキュメント作成中。年内には出るかも。


ガンホープロトタイプ(1.5ヶ月)
ランダムマップ。
物理エンジンを利用したギミック。
ネットワークの利用。Unityとネットワークエンジンの融合。
Electrotank Universe Platform、Photon Socket Server、Smartfox Server。
イベントシステム。
プログラマーはシステムを豊かにすることに注力。
プレハブ思想を強く意識して製作する。
プランナーが死ぬ(だけで済む)
プログラマーがルールを作り、デザイナーが色を入れ、プランナーがステータスを調整する。


・ケリ姫クエス
プログラマー1〜3人、アーティスト1〜6人、プランナー1人。
製作期間6ヶ月。
制作2週間で骨組みの部分は完成。
プロト開発時点から多くの要素をプレハブ化。Unityの思想を前面に押し出して制作。
細分化すれば作業をするのに必要な知識も減る。個別に製作可能。
ただし注意も必要。複数人で同じプレハブをいじくり回すのはNG。
プレハブ同士をまとめるのはプログラマーの仕事。プレハブの入れ子構造は制御がちょっと複雑。
AssetStore以外にも、GamePrefabs.com、prime[31]、RatRod studio。
アセットバンドルシステム。AndroidMarketは25MB以上のアプリをアップできない。AppStoreは20MB以上のアプリのダウンロートにWi-Fi環境が必須。
多重バンドル現象に注意。同じ素材なのに2回バンドルされてしまう。容量が数倍に膨れ上がってしまう。
ステージという大きいバンドルを作ることでこの問題を回避。
プロファイラ→スマフォでも利用可能。
Unityの思想を正しく理解している人を設計の中心に置く。
Unityというツールを恐れない。ちょっといじるだけならプログラマーじゃなくてもできる。
ない機能はまず売ってないかどうかを確認するところから。
骨格を作る工数を減らしたら次は質の向上へ。余った時間は全て質の向上に全力を尽くすべし。


・質疑応答
スマフォではDrawCallsが100超えるとちょっとやばい。EZGUIとかを使う。
ケリ姫クエストの最初の1〜2ヶ月は各々1人ずつ。
ケリ姫クエストではアーティスト・デザイナーはスクリプトは書かなかった。

Unityでムービー再生

Unityでムービー再生するにはMovieTextureを使います。
Proバージョンのみの対応です。
取り敢えずローカルにあるファイル再生版でGUITextureに貼りつけてみました。
サポートされているファイルタイプは、QuickTimeが再生できるものに限られているらしい。(.mov, .mpg, .mpeg, .mp4, .avi, .asf)


ムービーファイルをプロジェクトに追加すると、自動的にインポートされOggTheoraフォーマットに変換されます。
今回はGUITextureに貼りつけるので、GUITextureのオブジェクトを作って、それに下記のスクリプト(ControlMovie.csとする)を適用します。

using UnityEngine;
using System.Collections;

public class ControlMovie : MonoBehaviour
{
  public MovieTexture movieTexture;

  void Start()
  {
    guiTexture.texture = movieTexture;
    movieTexture.Play();
  }

  void Update()
  {
    if (Input.GetButtonDown("Fire1")) {
      movieTexture.Pause();
    } else if (Input.GetButtonDown("Fire2")) {
      movieTexture.Play();
    }
  }
}


movieTextureには、先程インポートして変換されたムービーテクスチャをInspectorから選択。
ムービーテクスチャをインポートした時に、オーディオトラックも一緒にインポートされてムービーテクスチャのオーディオクリップ子要素となります。
このファイルをGameObjectに付加しておくと、MovieTexture.Play()呼んだ時に音声が一緒に再生されますし、MovieTexture.Stop()を呼んだ時は一緒に停止されます。


最初再生した時になんか元ソースより音が小さいなぁと思ったら、これが原因でした。
取り敢えず、Min Distanceをいじって回避。