Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Copyright © GREE, Inc. All Rights Reserved.
カジュアルゲーム・ケーススタディ
Unity
グリー株式会社  
稲森亮亮介
Copyright © GREE, Inc. All Rights Reserved.
⾃自⼰己紹介
PC向けソーシャル
ゲームのクライアン
トプログラマ
Copyright © GREE, Inc. All Rights Reserved.
グリーにおけるUnity
Copyright © GREE, Inc. All Rights Reserved.
“Garage”からリリースされたプロダクト
Copyright © GREE, Inc. All Rights Reserved.
Amy the Starry Archer
Copyright © GREE, Inc. All Rights Reserved.
Amy the Starry Archer
Demo
Copyright © GREE, Inc. All Rights Reserved.
Amy the Starry Archer
11⽉月
Director
Programer
12⽉月 1⽉月 2⽉月 3⽉月
Programer
(Juni...
Copyright © GREE, Inc. All Rights Reserved.
• iOS7以降/デバイスはiPhone5以降
• Android4.0以降/デバイスは2年以内に発売された機種
• ただしQA結果で対応コストの高いデバイ...
Target Frame Rate
Copyright © GREE, Inc. All Rights Reserved.
“you don't gain that much from 60 fps
and it doesn't look like the real thing....
Copyright © GREE, Inc. All Rights Reserved.
Target Frame Rate
• iPhone5s∼、Nexus5∼等は60fpsをターゲットに
• 最低ラインは30fps
• 見た目だけじゃなくて...
Copyright © GREE, Inc. All Rights Reserved.
Copyright © GREE, Inc. All Rights Reserved.
• Graphics
• static batchingを有効に
• dynamic batchingを有効にする為の諸条件を満たす
• ピクセルライティン...
Clouds
Overdraw多過ぎ
• 雲を空間埋める近景オブジェクトとして使うとやっかい
• 基本半透明だし、ある程度細かくないと雲間を通り抜けるよう
な表現をした時不自然
Overdraw多すぎ
Overdrawを減らす
Overdrawを減らす
• 全体的に雲をカメラから遠くに置き、スプライトを⼤大きく  
• 中景⽤用、遠景⽤用の雲に分け、遠景の雲はより⼤大きくして画⾯面を埋める
before after
Overdrawを減らす
Copyright © GREE, Inc. All Rights Reserved.
Sprites/Default
• Sprite⽤用シェーダの不不要な処
理理を削ってみたりもしたもの
の、フラグメントシェーダは
削れなかったのでほぼ効果...
Copyright © GREE, Inc. All Rights Reserved.
まとめ
• 雲のように、アルファブレンディングが発生するSprite(Particle
含む)で画面を埋める場合、Overdrawをいかに減らすか工夫す
る...
Lighting
Copyright © GREE, Inc. All Rights Reserved.
ライトマップを直接編集
• Asset Storeの3D背景素材は、ライ
トマップに使われたLightが削除され
ている事がある
• 1からLightを配置...
Copyright © GREE, Inc. All Rights Reserved.
ライトマップを直接編集
• exrファイル(OpenEXR)は一部の画
像編集ソフトで編集可能
Copyright © GREE, Inc. All Rights Reserved.
ライトマップテクスチャ解像度度
1024px(700KB)
Copyright © GREE, Inc. All Rights Reserved.
ライトマップテクスチャ解像度度
512px(170KB)
Copyright © GREE, Inc. All Rights Reserved.
ライトマップテクスチャ解像度度
256px(43KB)
Copyright © GREE, Inc. All Rights Reserved.
ライトマップテクスチャ解像度度
512px(170KB)
1024px(700KB) 256px(43KB)
Copyright © GREE, Inc. All Rights Reserved.
動的にライトマップ解除
• lightmapIndexはLightmapSettings.lightmapsのインデックスだが、-‐‑‒1は
ライトマップが...
Copyright © GREE, Inc. All Rights Reserved.
その他Lightingについて
• 敵キャラクターは頂点ライティングのみ
• 常に動きまわってて、しかも遠目なのでそこまで気にならない
• でもまっすぐDi...
Scripting
Copyright © GREE, Inc. All Rights Reserved.
検証
Copyright © GREE, Inc. All Rights Reserved.
検証
• Galaxy S4(SC-04E)/Android4.4.2
• Unity4.6.2
• 10万回ループさせて計測
• if文のオーバヘッドは無...
Copyright © GREE, Inc. All Rights Reserved.
cachedTransform transform GetComponent(typeof(Transform))
0.0009226
0.0003179
...
Copyright © GREE, Inc. All Rights Reserved.
GetComponent(typeof(Transform)) Function Find Raycast
0.0005000
0.0002500
0.00...
Copyright © GREE, Inc. All Rights Reserved.
Raycast()
• 弓はUnityの衝突判定を使わず、
毎フレームRaycast()で処理
• RaycastAll系は、衝突する順に返
してくれるわけ...
Copyright © GREE, Inc. All Rights Reserved.
検証
• 重たいとされるFind()系の中でも、FindObjectsOfType()が段
違いに重かった(7 10ms/call)
• Raycast()...
Enemy Move
Copyright © GREE, Inc. All Rights Reserved.
Enemy Move
• 敵の動きが静的な場合ってどんな実装がメジャーなんでしょう
ね?
• とりあえず手付けで制御点置いてくような作業はしたくなかっ
た
...
Copyright © GREE, Inc. All Rights Reserved.
Enemy Move
線分(-‐‑‒5,0,10)(5,0,10)
+
=
中⼼心(5,0,10)の円
Player(Camera) Player(Came...
Copyright © GREE, Inc. All Rights Reserved.
Enemy Move
    中⼼心(0,0,50),  半径10の円  
+  
中⼼心(0,0,10),  半径1の円  
(θ:0→1080°)
=
...
Copyright © GREE, Inc. All Rights Reserved.
Enemy Move
さらに⼩小さな円運動を合成
Player(Camera)
Copyright © GREE, Inc. All Rights Reserved.
Enemy Move
Copyright © GREE, Inc. All Rights Reserved.
Enemy Move
少数のパラメータで様々な動きを実現
Copyright © GREE, Inc. All Rights Reserved.
Enemy Move
• フォーメーションを組んでるような動きは、同じ軌道の敵で出
現座標をずらせばOK
• 同じ軌道と同じ出現位置で、出現時間をずらせば、...
Copyright © GREE, Inc. All Rights Reserved.
Happy Tuning!
Copyright © GREE, Inc. All Rights Reserved.
インターネットを通じて、

世界をより良良くする。
Copyright © GREE, Inc. All Rights Reserved.
[GREE Tech Talk #07] Unityカジュアルゲーム・ケーススタディ
[GREE Tech Talk #07] Unityカジュアルゲーム・ケーススタディ
[GREE Tech Talk #07] Unityカジュアルゲーム・ケーススタディ
[GREE Tech Talk #07] Unityカジュアルゲーム・ケーススタディ
Upcoming SlideShare
Loading in …5
×

[GREE Tech Talk #07] Unityカジュアルゲーム・ケーススタディ

12,732 views

Published on

「Unityカジュアルゲーム・ケーススタディ」稲森 亮介(グリー株式会社)

※GREE Tech Talk #07「Unity Performance Casual Talk」での登壇資料です。
http://techtalk.labs.gree.jp/07/

Published in: Technology
  • Login to see the comments

[GREE Tech Talk #07] Unityカジュアルゲーム・ケーススタディ

  1. 1. Copyright © GREE, Inc. All Rights Reserved. カジュアルゲーム・ケーススタディ Unity グリー株式会社   稲森亮亮介
  2. 2. Copyright © GREE, Inc. All Rights Reserved. ⾃自⼰己紹介 PC向けソーシャル ゲームのクライアン トプログラマ
  3. 3. Copyright © GREE, Inc. All Rights Reserved. グリーにおけるUnity
  4. 4. Copyright © GREE, Inc. All Rights Reserved. “Garage”からリリースされたプロダクト
  5. 5. Copyright © GREE, Inc. All Rights Reserved. Amy the Starry Archer
  6. 6. Copyright © GREE, Inc. All Rights Reserved. Amy the Starry Archer Demo
  7. 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. 8. Copyright © GREE, Inc. All Rights Reserved. • iOS7以降/デバイスはiPhone5以降 • Android4.0以降/デバイスは2年以内に発売された機種 • ただしQA結果で対応コストの高いデバイスは切る • タブレット端末も対応 対応デバイス
  9. 9. Target Frame Rate
  10. 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. 11. Copyright © GREE, Inc. All Rights Reserved. Target Frame Rate • iPhone5s∼、Nexus5∼等は60fpsをターゲットに • 最低ラインは30fps • 見た目だけじゃなくて、操作感度・難易度にも影響する為やや 注力 • Application.targetFramerateを動的に変える
  12. 12. Copyright © GREE, Inc. All Rights Reserved.
  13. 13. Copyright © GREE, Inc. All Rights Reserved. • Graphics • static batchingを有効に • dynamic batchingを有効にする為の諸条件を満たす • ピクセルライティングを使わない • そもそもリアルタイムライティングをなるべく減らす • テクスチャ圧縮 • アルファテスト、アルファブレンディング最小化 • Scripts • Object PoolingでInstantiate()を避ける • new を減らしてGCを減らす • Physics • Colliderはなるべくプリミティブコライダを組み合わせる • fixedDeltaTimeは可能な範囲で小さく 基本のおさらい
  14. 14. Clouds
  15. 15. Overdraw多過ぎ
  16. 16. • 雲を空間埋める近景オブジェクトとして使うとやっかい • 基本半透明だし、ある程度細かくないと雲間を通り抜けるよう な表現をした時不自然 Overdraw多すぎ
  17. 17. Overdrawを減らす
  18. 18. Overdrawを減らす
  19. 19. • 全体的に雲をカメラから遠くに置き、スプライトを⼤大きく   • 中景⽤用、遠景⽤用の雲に分け、遠景の雲はより⼤大きくして画⾯面を埋める before after Overdrawを減らす
  20. 20. Copyright © GREE, Inc. All Rights Reserved. Sprites/Default • Sprite⽤用シェーダの不不要な処 理理を削ってみたりもしたもの の、フラグメントシェーダは 削れなかったのでほぼ効果無 し   • 検証環境:  SC-‐‑‒04E/Android4.4.2   • フラグメントシェーダのColor 処理理も削りたかったが、雲出 現時にフェードインさせる必 要があった為削れず
  21. 21. Copyright © GREE, Inc. All Rights Reserved. まとめ • 雲のように、アルファブレンディングが発生するSprite(Particle 含む)で画面を埋める場合、Overdrawをいかに減らすか工夫す る • 絵がチープにならない範囲で1枚あたりのSpriteを大きくし、枚 数を減らす
  22. 22. Lighting
  23. 23. Copyright © GREE, Inc. All Rights Reserved. ライトマップを直接編集 • Asset Storeの3D背景素材は、ライ トマップに使われたLightが削除され ている事がある • 1からLightを配置し直すのはしんど いので、ライトマップテクスチャ自体 を調整すると楽
  24. 24. Copyright © GREE, Inc. All Rights Reserved. ライトマップを直接編集 • exrファイル(OpenEXR)は一部の画 像編集ソフトで編集可能
  25. 25. Copyright © GREE, Inc. All Rights Reserved. ライトマップテクスチャ解像度度 1024px(700KB)
  26. 26. Copyright © GREE, Inc. All Rights Reserved. ライトマップテクスチャ解像度度 512px(170KB)
  27. 27. Copyright © GREE, Inc. All Rights Reserved. ライトマップテクスチャ解像度度 256px(43KB)
  28. 28. Copyright © GREE, Inc. All Rights Reserved. ライトマップテクスチャ解像度度 512px(170KB) 1024px(700KB) 256px(43KB)
  29. 29. Copyright © GREE, Inc. All Rights Reserved. 動的にライトマップ解除 • lightmapIndexはLightmapSettings.lightmapsのインデックスだが、-‐‑‒1は ライトマップが割り当てられていない事を表す初期値   • どこかのバージョンで1バイトから2バイトに変更更された模様
  30. 30. Copyright © GREE, Inc. All Rights Reserved. その他Lightingについて • 敵キャラクターは頂点ライティングのみ • 常に動きまわってて、しかも遠目なのでそこまで気にならない • でもまっすぐDirectional Lightを当てるだけだと安っぽいので、 Point Lightを複数使う • Light Probesは使わず • ライトマップは256px(43KB) 10枚前後 シーン数 • あんまり背景の一箇所を見つめる機会の無いゲームなので
  31. 31. Scripting
  32. 32. Copyright © GREE, Inc. All Rights Reserved. 検証
  33. 33. Copyright © GREE, Inc. All Rights Reserved. 検証 • Galaxy S4(SC-04E)/Android4.4.2 • Unity4.6.2 • 10万回ループさせて計測 • if文のオーバヘッドは無視できる程度
  34. 34. 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)
  35. 35. Copyright © GREE, Inc. All Rights Reserved. GetComponent(typeof(Transform)) Function Find Raycast 0.0005000 0.0002500 0.0007500 0.0010000 sec   (loop:100k) (無視できるレベル)
  36. 36. Copyright © GREE, Inc. All Rights Reserved. Raycast() • 弓はUnityの衝突判定を使わず、 毎フレームRaycast()で処理 • RaycastAll系は、衝突する順に返 してくれるわけではない点に注意 • 当ゲームでは仕様上、都度RaycastHit[]を ソートで十分にワーク
  37. 37. Copyright © GREE, Inc. All Rights Reserved. 検証 • 重たいとされるFind()系の中でも、FindObjectsOfType()が段 違いに重かった(7 10ms/call) • Raycast()はColliderの数、Find()系はヒエラルキーに影響され るはずなので、実際に使うScene上で実測してみる
  38. 38. Enemy Move
  39. 39. Copyright © GREE, Inc. All Rights Reserved. Enemy Move • 敵の動きが静的な場合ってどんな実装がメジャーなんでしょう ね? • とりあえず手付けで制御点置いてくような作業はしたくなかっ た • でも難易度設計上、少し複雑な動きもさせたい
  40. 40. Copyright © GREE, Inc. All Rights Reserved. Enemy Move 線分(-‐‑‒5,0,10)(5,0,10) + = 中⼼心(5,0,10)の円 Player(Camera) Player(Camera) Player(Camera)
  41. 41. Copyright © GREE, Inc. All Rights Reserved. Enemy Move    中⼼心(0,0,50),  半径10の円   +   中⼼心(0,0,10),  半径1の円   (θ:0→1080°) = Player(Camera)
  42. 42. Copyright © GREE, Inc. All Rights Reserved. Enemy Move さらに⼩小さな円運動を合成 Player(Camera)
  43. 43. Copyright © GREE, Inc. All Rights Reserved. Enemy Move
  44. 44. Copyright © GREE, Inc. All Rights Reserved. Enemy Move 少数のパラメータで様々な動きを実現
  45. 45. Copyright © GREE, Inc. All Rights Reserved. Enemy Move • フォーメーションを組んでるような動きは、同じ軌道の敵で出 現座標をずらせばOK • 同じ軌道と同じ出現位置で、出現時間をずらせば、1つの軌道上 を連なって動く表現 • 補助機能を用意して生産性は上がったが、直感的に設定しづら いので、慣れるのには時間がかかる
  46. 46. Copyright © GREE, Inc. All Rights Reserved. Happy Tuning!
  47. 47. Copyright © GREE, Inc. All Rights Reserved. インターネットを通じて、
 世界をより良良くする。
  48. 48. Copyright © GREE, Inc. All Rights Reserved.

×