【満員御礼/増員350名】第2回 渋谷Unity技術勉強会xコロプラ事例発表 : ATND
http://atnd.org/events/24706
Togetterまとめ。
2012/03/01_第2回 渋谷Unity技術勉強会xコロプラ事例発表( #ShibuyaUnity ) - Togetter
http://togetter.com/li/266118
Unity入門 第1回 - 赤坂玲音(@LeonAkasaka)さん
スライド資料はこちら。
※赤坂玲音さんの講演はスライド資料が公開されているので自分が特に気になった部分とスライドに含まれていない解説やQAの部分についてだけ記述して置きます。
- 以下の様な本を出されています。
Windowsゲームプログラミング 第2版 Game Developer
- 作者: 赤坂玲音
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2008/02/26
- メディア: 大型本
- 購入: 3人 クリック: 19回
- この商品を含むブログ (12件) を見る
これからはじめるVisualC++2010forマネージコードC++/CLI
- 作者: 赤坂玲音
- 出版社/メーカー: 秀和システム
- 発売日: 2010/06/16
- メディア: 単行本
- クリック: 18回
- この商品を含むブログ (5件) を見る
- 自身でゲームを作るような事はほとんど無いけどゲーム会社に新しい技術の指導に行く様な事は有るとの事でした
- フリーランス
こちらのサイトでUnityの入門記事を掲載中。
本勉強会のこれからの予定
3月1日(本日)
- Unityの基本的な構造を俯瞰
- 構造上の注意点など
3月29日
- グラフィックス
- リソースの実行時生成などプロシージャルな手法
4月26日
- Unity Editorの拡張
.NET Framework によくある誤解
※iOSでは規約の問題でAOTによる事前コンパイルのみ
(筆者注)
AOT(Ahead-Of-Time)
事前コンパイラ - Wikipedia
http://ja.wikipedia.org/wiki/%E4%BA%8B%E5%89%8D%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9
会場への質問
プロジェクトにBooを使っている人居ますか?→会場の挙手 0
他のC#を使ったプロジェクトにも使える汎用的なライブラリを作る時の注意点
- 作成するものは一般的な.NET FrameworkのDLLでOK
- MonoBehaviourを継承する様なものだと他の環境では使えない
- .NET Framework 2.0相当の機能に限定する
- 最新バージョンは4.0だが、Unityで利用することを考えるとスマートフォン向けのプロファイルが2.0相当
Unity依存のライブラリを作成する時の注意点
- 可能な限り型安全に。SendMessageなどは極力避ける
Unityでオブジェクトと言っている場合には全部で3つの可能が有るので注意
- System.Object
- 全てのオブジェクトの基底クラス
- UnityEngine.Object
- UnityEngineによって管理されるオブジェクト
- ゲームオブジェクト、コンポーネント、アセットの基底クラス
- UnityEngine.GameObject
- UnityEngine.Objectから派生
- シーンに配置されているオブジェクト
GCの話
勘違いされがちな this
コロプラのUnity事情2 〜リズムコイン!〜 - 株式会社コロプラ 馬場 功淳さん
- 月に3本ゲームをリリースするのが目標
- Unityチームは現在13人
- Unity製のゲームは全世界合計で250万〜300万DLくらい
難易度調整Tips
- プレイの完全自動化と高速化をしよう
- 注意点
- メリット
- バランス調整という、一番時間が掛かり尚かつ重要な作業を短縮できる
- 複数台の端末でゴリゴリ回すと、眠っていた不具合が突然出てくる事などもある
チューニング1
- Deep Profileで(ONにした状態で)プロファイリングしながら探す
- Deep profileはONでメソッドの奥まで確認出来る。
- 感覚で探さない。プロファイリングして負荷の上位(ボトルネック)から順に最適化しよう!
チューニング2
ヒエラルキーなどツリーを検索する以下のメソッドは極力使わない
GameObject.Find("Name")
GameObject.FindObjectsWithTag("TagName")
GameObject.GetComponents
GameObject.SetActiveRecursively(bool)
※特にUpdate()では絶対に使用禁止☆
× GameObject obj = GameObject.Find("Wall");
◯ public GameObject wall;
チューニング3
DateTime型/TimeSpan型を使わない
TimeSpan delta = DateTime.Now - startTime;
long elapsed = delta.TotalMilliseconds;
といった処理をUpdate()で毎フレーム行うと計算コストが非常に高い。しかもこれだとゲーム内時間ではなく実経過時間となってしまうので、ゲームオブジェクトの管理に使うにはとても都合が悪い。
private float delta = 0.0f;
delta += Time.deltaTime;
など
(※関連するTwitterでのツイート)
チューニング5
(筆者注:あれ?チューニング4をメモするの忘れたかな?)
- RayCastを節約する
- くまの影(の板ポリ)の座標を求めるためにUpdate毎にRayCastしていた(Deep ProfileでCPU Load 2.5%くらい)
- RayCastする回数を抑える。ジャンプする以外は使わないので、状態判定を行なって飛んでないときは処理をカット → 2%改善
チューニング6
パーティクルは大きく少なく
処理負荷はパーティクルの数に比例する
→粒の数を減らして大粒にする。表示されない方向に飛ばないように速度を与えるように設定値をしっかり見直す
例) コインの変化等のパーティクルが200出てた(とんでもなく重い)→20まで減らして大粒に
機種依存情報1
フィーバータイム中の背景のクマスクリーン
- Screenモデルを用意
- Mesh RendererのマテリアルにRender Texture
▲現象
該当機種:Docomo Galaxy S
フィーバータイム開始時、もしくは終了時にアプリケーションが停止する。(GUITextureに転送して2Dとして表示するぶんには問題無し)
▲原因
起動時にセットするとフリーズ
▲対処
必要な時に設定する。不要になったら削除
KumaCamera.camera.targetTexture = RenderTexture;
KumaCamera.active = true;
機種依存情報2
▲現象
該当機種:Docomo Galaxy S2
極まれに端末リブート
▲原因
Audio Sourceが付加されたゲームオブジェクトで
audio.clip = Source
audio.Play()
というロジックでサウンドを短いスパン(1秒間に複数回)を何度も繰り返すことによって発生
▲回避方法
元からAudio Sourceに対してAudio Clipを設定しておき
audio.PlayOnShot();
に変更することによってクラッシュを回避
- コードを1個1個削っては自動動作を2時間位流してクラッシュするを繰り返して確認。バグを見つけるのに2日かかった。
- 本などでは「回避方法」の様な記述が書かれている。しかし、今回は音のクロスフェードをしたかった為にこの様な実装にしていた。
(筆者注:LTが懇親会の時に行われていて、他の方々と話ていてLTが始まっているの気がつくのが遅れてあまりメモが取れていません。メモれた部分だけ書いときます)
(LT)三次元解剖学書ネタか、今作ってる猫アプリのネタ by 金田さん
- 3Dの人体模型アプリを作った時の話
- 作成する必要が有る3Dモデルの数が膨大で有ったため依頼を受けた大学でアルバイトを募った
- 80人もの応募が有った
- そんなには面接は出来ない為、指定した部位の筋肉のモデルをメタセコイアで作って貰う事
- 40人も提出が有った
- その中から数人(※人数を言われていたはずですが忘れちゃいました。3人くらいだったと思います)を採用
(LT)2Dアセット系まとめ - 時村 良平さん
スライド資料はこちら。
こちらもスライド資料が有るので自分が気になった所だけ。
- 2DToolKitは「2Dの見た目とPhysicsの組み合わせが可能」。Angly Birdsみたいな簡単に作成出来る。この時、物理演算はUnity標準のものが使用可能
- 2Dの見た目とPhysicsが一致しているためこの様なトゲトゲなもの場合にもトゲの部分にのみ当たり判定が有る
- ex2DはUIについては×(筆者注:一応、ボタンくらいは作れる仕組みが有ります。でもまぁ、基本的には非対応な感じです)
まとめ
- 2DToolKit
- 絵に合わせた当り判定が必要なアプリ
- AngryBirdsなど
- eX2D
- ちゃんとしたコマ送りアニメが必要な2Dゲーム
- NGUI
- GUI主体のゲームならこれがベター
- EZGUI
- もう役割は終えた?