Upload
mikito-yoshiya
View
25.062
Download
0
Embed Size (px)
Citation preview
第5回 渋谷Unity技術勉強会
ゆるロボ製作所開発事例 – ドローコール削減技 n 連発!
株式会社ゲームポット スマートフォン開発部
吉谷幹人
自己紹介
■吉谷幹人(ヨシヤミキト)と申します
■ゲームポットでモバイル向けアプリを開発してます ・ソーシャルゲームの開発に関わったり ・社会人2年目奮闘中
■Unity使い始めて半年 ・3Dゲームの開発経験はまったくありませんでした
■開発事例アプリ「ゆるロボ製作所」について
■ドローコール削減について
■デザイナ巻き込んだスクラム開発の話
今日お話すること
ゆるロボ製作所
・ロボ生産マシンに材料と燃料をセット ・経過時間に応じてロボが製造 ・図鑑コンプ目指す
■放置系キャラコンプゲーム
■傾けて出荷
■ゆるカワ3Dキャラ
・ロボを転がしてベルトコンベアに
・30体固有アクション
ゆるロボ製作所
■完全無料 ・AdMobの広告のみ
■リリース3日でApp Store ゲームカテゴリ(無料)1位
ゆるロボ製作所
■Google Play ゲームカテゴリ(無料)1位
デザイナ巻き込んだスクラム開発
■開発手法としてスクラムを利用 ・アジャイル開発の一種 ・変化に柔軟に対応できる ・短期間の開発(スプリント)を何回もまわす ・スプリントごとにプレイ可能なゲームを作る
スクラムで開発
■開発体制 ・PM(スクラムマスター):1人 + 補佐1人 ・デザイナー:メイン1人、3Dキャラヘルプ1人 ・プログラマ:1人
■期間 ・プロトタイピング:2週間 ・製品版:2ヶ月(4スプリント)
体制
・小規模、開発人数が少ない ・必要な要素のみ利用
■厳密なスクラムではない
■実践したこと ・プロダクトバックログでユーザーストーリー管理 ・ストーリーポイントでの見積もり ・重要度による優先作業の明確化 ・デイリースクラム(朝会)の実施 ・タスクボードで進捗確認 ・スプリント最終日でデモ、KPTで振り返り × タスク分解、バーンダウンチャート (効果よりオーバーヘッドのほうが大きいと判断)
スクラムで開発
■NGUI ・EZ GUIがEasyじゃないって何回も聴かされた ・他と比較した結果、使いやすさ・パフォーマンスが良かった
使用したプラグインなど
■全員が常にUnity上で最新版を確認 ・デザイナにもバージョン管理システム(Git)使ってもらった
デザイナにもUnity使ってもらった
■素材の受け渡し・適用のオーバーヘッドゼロ ・デザイナが素材をUnityにプロジェクトに追加 ・位置や細かいパラメータはデザイナが微調整
プログラマ
よくある開発の流れ
デザイナ
仮の素材でUI実装 素材作成
素材Unityに取り込み
素材組み込み
微調整
UIイメージ作成
朝会などで確認
UIイメージチームで共有
フィードバック適用 フィードバック適用
Gitで反映
・基本システムの実装 ・ロボ企画、3Dモデル(6体) ・ミニマムで遊べる状態
■ スプリント1
■ スプリント2 ・チュートリアル ・ロボ行動ロジック ・ロボデザイン、3Dモデル(30体)着手
各スプリント内容
■ スプリント3 ・広告の差し込み ・UIのブラッシュアップ ・ロボ3Dモデル完成(30体)
■ スプリント4 ・ソーシャルメディア投稿機能 ・ゲームバランス調整 ・社内テストフィードバック適用(3回)
各スプリント内容
■とにかく速い ・調整にかかるコストが減った
デザイナと一緒にUnity使ってスクラム開発して
■スプリントごとにブラッシュアップが楽 ・新しいUIの追加や改修が柔軟にできた
■各々の知識を補えた ・プログラマ(私)が全然グラフィック・3Dの知識ない
ドローコール削減
■ いろんなキャラをたくさん歩かせる
■いろんな機種でも対応させたい ・Android ・iPhone 3GS
ゆるロボのゲームとしての要件
・15体ぐらいはわらわらさせたい
■ いろんなキャラをたくさん歩かせる
■いろんな機種でも対応させたい ・Android ・iPhone 3GS
ゆるロボのゲームとしての要件
・15体ぐらいはわらわらさせたい
ドローコール減らす戦い
■描画命令を送る回数
■コール数減らせばFPSが上がる
ドローコール数とは
■GameペインのStatsから見れる
■ 目安(iPhone4に関して)
■ドローコール20を目標にした
・200コール:15fps ・100コール:30fps ・50コール:60fps
実際のドローコール目標値
・低スペックマシンでの動作も想定
■ キャラ:32コール
ゆるロボを何も考えずにつくると
■ 背景:3 - 5コール
・ロボ15体:15コール ・ねじこ(アシスタント):1コール ・影16体分:16コール
■ GUI:40 – 50コールくらい?
■ ロボ製造マシン:1コール
■ キャラ:32コール
ゆるロボを何も考えずにつくると
■ 背景:3 - 5コール
・ロボ15体:15コール ・ねじこ(アシスタント):1コール ・影16体分:16コール
■ GUI:40 – 50コールくらい?
20コールとか余裕でオーバー!
■ ロボ製造マシン:1コール
オーバーする主原因は?
■Blob Shadow Projector1つで1コール
■スキンメッシュオブジェクト1つで1コール
■OnGUIの呼び出し
・影の投影
・ボーンアニメーションが入ってるオブジェクト
・UnityデフォルトのGUI処理系 ・ボタン表示等で1コール:OnGUI.Button();
改善法1:Blob Shadow Projector使わない
■非スキンメッシュの影ポリを足元に配置
■注意:なるべくRayは飛ばさない ・地面の位置測定につかいたくなる ・Updateで行うと割と高負荷 ・通常は固定値、必要になったら飛ばすなど
・同じマテリアルならバッチ化され1コール
■背景オブジェクト全部まとめた
改善法2:スキンメッシュオブジェクトをまとめる
・全部ひっくるめて1コールに
■アニメーションはスクリプトで動かす ・出荷口の開く・閉じる ・ベルトコンベア ・工場のガジェット(歯車など)
■パネルをまとめる
改善法3:NGUIをうまく使う
・UIPanelごとにコールされる ・GameObjectでグループ構造作って一つのパネルに
■テクスチャをまとめる ・テクスチャ(アトラス)ごとにコールされる ・UIもフォントも一枚(1024x1024)におさめた
■NGUI ・ドローコールを減らすためのポイントがある
■動かさないオブジェクトはStaticをOnに
■スカイボックスを利用しない
・Static Batchingの対象にする
その他
・もし空を表現する場合は半球にテクスチャ張って代用
■Dynamic Batching分断に注意 ・Transform.scaleが(-1,1,1) と(1,1,1)の物 ・Renderer.receiveShadowsの設定が違う物
を交互に配置しない
■ キャラ:17コール
n連発の結果
・ロボ15体:15コール ・ねじこ(アシスタント):1コール ・影16体分:1コール
■ 背景:1コール
■ NGUI:1コール
■ ロボ製造マシン:1コール
■ キャラ:17コール
n連発の結果
・ロボ15体:15コール ・ねじこ(アシスタント):1コール ・影16体分:1コール
■ 背景:1コール
■ NGUI:1コール
■ ロボ製造マシン:1コール
20コール達成!
まとめ
■デザイナにもスクラムとUnity使ってもらった ・オーバーヘッドが激減 ・ブラッシュアップが意欲的・柔軟にできる
■ドローコール減らすのが高速化の鍵 ・バッチ化でコールをまとめる ・スキンメッシュオブジェクトに注意 ・NGUIいいね
まとめ
おわりです