More Related Content
Similar to [GREE Tech Talk #07] Unityカジュアルゲーム・ケーススタディ (20)
[GREE Tech Talk #07] Unityカジュアルゲーム・ケーススタディ
- 7. Copyright © GREE, Inc. All Rights Reserved.
Amy the Starry Archer
11⽉月
Director
Programer
12⽉月 1⽉月 2⽉月 3⽉月
Programer
(Junior)
Artist
Artist
(3D Designer)
(Effect Designer)
(Sound Designer)
- 8. Copyright © GREE, Inc. All Rights Reserved.
• iOS7以降/デバイスはiPhone5以降
• Android4.0以降/デバイスは2年以内に発売された機種
• ただしQA結果で対応コストの高いデバイスは切る
• タブレット端末も対応
対応デバイス
- 10. Copyright © GREE, Inc. All Rights Reserved.
“you don't gain that much from 60 fps
and it doesn't look like the real thing.”
- Nicolas Guérin(Ubisoft)
http://www.techradar.com/news/gaming/viva-la-resoluci-n-assassin-s-creed-dev-thinks-industry-is-dropping-60-fps-standard-1268241
“基本75FPS以上”
※75Hzモードの場合
- CEDEC2014「Oculus Panel Discussion ∼Oculus Riftを用いたゲーム制作∼」
30 fps? 60 fps? or...?
- 11. Copyright © GREE, Inc. All Rights Reserved.
Target Frame Rate
• iPhone5s∼、Nexus5∼等は60fpsをターゲットに
• 最低ラインは30fps
• 見た目だけじゃなくて、操作感度・難易度にも影響する為やや
注力
• Application.targetFramerateを動的に変える
- 13. Copyright © GREE, Inc. All Rights Reserved.
• Graphics
• static batchingを有効に
• dynamic batchingを有効にする為の諸条件を満たす
• ピクセルライティングを使わない
• そもそもリアルタイムライティングをなるべく減らす
• テクスチャ圧縮
• アルファテスト、アルファブレンディング最小化
• Scripts
• Object PoolingでInstantiate()を避ける
• new を減らしてGCを減らす
• Physics
• Colliderはなるべくプリミティブコライダを組み合わせる
• fixedDeltaTimeは可能な範囲で小さく
基本のおさらい
- 20. Copyright © GREE, Inc. All Rights Reserved.
Sprites/Default
• Sprite⽤用シェーダの不不要な処
理理を削ってみたりもしたもの
の、フラグメントシェーダは
削れなかったのでほぼ効果無
し
• 検証環境: SC-‐‑‒04E/Android4.4.2
• フラグメントシェーダのColor
処理理も削りたかったが、雲出
現時にフェードインさせる必
要があった為削れず
- 21. Copyright © GREE, Inc. All Rights Reserved.
まとめ
• 雲のように、アルファブレンディングが発生するSprite(Particle
含む)で画面を埋める場合、Overdrawをいかに減らすか工夫す
る
• 絵がチープにならない範囲で1枚あたりのSpriteを大きくし、枚
数を減らす
- 27. Copyright © GREE, Inc. All Rights Reserved.
ライトマップを直接編集
• Asset Storeの3D背景素材は、ライ
トマップに使われたLightが削除され
ている事がある
• 1からLightを配置し直すのはしんど
いので、ライトマップテクスチャ自体
を調整すると楽
- 28. Copyright © GREE, Inc. All Rights Reserved.
ライトマップを直接編集
• exrファイル(OpenEXR)は一部の画
像編集ソフトで編集可能
- 32. Copyright © GREE, Inc. All Rights Reserved.
ライトマップテクスチャ解像度度
512px(170KB)
1024px(700KB) 256px(43KB)
- 33. Copyright © GREE, Inc. All Rights Reserved.
動的にライトマップ解除
• lightmapIndexはLightmapSettings.lightmapsのインデックスだが、-‐‑‒1は
ライトマップが割り当てられていない事を表す初期値
• どこかのバージョンで1バイトから2バイトに変更更された模様
- 34. Copyright © GREE, Inc. All Rights Reserved.
その他Lightingについて
• 敵キャラクターは頂点ライティングのみ
• 常に動きまわってて、しかも遠目なのでそこまで気にならない
• でもまっすぐDirectional Lightを当てるだけだと安っぽいので、
Point Lightを複数使う
• Light Probesは使わず
• ライトマップは256px(43KB) 10枚前後 シーン数
• あんまり背景の一箇所を見つめる機会の無いゲームなので
- 37. Copyright © GREE, Inc. All Rights Reserved.
検証
• Galaxy S4(SC-04E)/Android4.4.2
• Unity4.6.2
• 10万回ループさせて計測
• if文のオーバヘッドは無視できる程度
- 38. Copyright © GREE, Inc. All Rights Reserved.
cachedTransform transform GetComponent(typeof(Transform))
0.0009226
0.0003179
0.0001484
0.0005000
0.0002500
0.0007500
0.0010000
sec
(loop:100k)
- 39. Copyright © GREE, Inc. All Rights Reserved.
GetComponent(typeof(Transform)) Function Find Raycast
0.0005000
0.0002500
0.0007500
0.0010000
sec
(loop:100k)
(無視できるレベル)
- 40. Copyright © GREE, Inc. All Rights Reserved.
Raycast()
• 弓はUnityの衝突判定を使わず、
毎フレームRaycast()で処理
• RaycastAll系は、衝突する順に返
してくれるわけではない点に注意
• 当ゲームでは仕様上、都度RaycastHit[]を
ソートで十分にワーク
- 41. Copyright © GREE, Inc. All Rights Reserved.
検証
• 重たいとされるFind()系の中でも、FindObjectsOfType()が段
違いに重かった(7 10ms/call)
• Raycast()はColliderの数、Find()系はヒエラルキーに影響され
るはずなので、実際に使うScene上で実測してみる
- 43. Copyright © GREE, Inc. All Rights Reserved.
Enemy Move
• 敵の動きが静的な場合ってどんな実装がメジャーなんでしょう
ね?
• とりあえず手付けで制御点置いてくような作業はしたくなかっ
た
• でも難易度設計上、少し複雑な動きもさせたい
- 44. Copyright © GREE, Inc. All Rights Reserved.
Enemy Move
線分(-‐‑‒5,0,10)(5,0,10)
+
=
中⼼心(5,0,10)の円
Player(Camera) Player(Camera)
Player(Camera)
- 45. Copyright © GREE, Inc. All Rights Reserved.
Enemy Move
中⼼心(0,0,50), 半径10の円
+
中⼼心(0,0,10), 半径1の円
(θ:0→1080°)
=
Player(Camera)
- 46. Copyright © GREE, Inc. All Rights Reserved.
Enemy Move
さらに⼩小さな円運動を合成
Player(Camera)
- 49. Copyright © GREE, Inc. All Rights Reserved.
Enemy Move
• フォーメーションを組んでるような動きは、同じ軌道の敵で出
現座標をずらせばOK
• 同じ軌道と同じ出現位置で、出現時間をずらせば、1つの軌道上
を連なって動く表現
• 補助機能を用意して生産性は上がったが、直感的に設定しづら
いので、慣れるのには時間がかかる