SlideShare a Scribd company logo
1 of 38
UnityでUI開発を高速化した件
御厨 雄輝
2019/07/24 Gotanda.unity #13
話すこと
• 自己紹介
• Kick-Flight
• UI開発高速化のために行ったこと(3点)
自己紹介
御厨 雄輝(みくりや ゆうき)
株式会社サイバーエージェント
2013年度入社
エンジニア
▼趣味
地下アイドル
ボルダリング
ポケモンカード
Kick-Flight
UI開発高速化のために行ったこと
Q. なぜ高速化した?
UI開発高速化のために行ったこと
TGS
2018
闘会議
2019
CBT
2018/09 2019/01 2019/05
UI開発高速化のために行ったこと
TGS
2018
闘会議
2019
CBT
2018/09 2019/01 2019/05
インゲーム 新キャラ サーバ
UI開発高速化のために行ったこと
A. 高速化しないと間に合わない
(ゲームの面白さを伝える部分の開発に比重をおいていた)
UI開発高速化のために行ったこと
Q. 何をした?
UI開発高速化のために行ったこと
A1. UI基盤機能を作る
UI開発高速化のために行ったこと
Unityのデフォルト機能で補えないもの
UI基盤機能を作る
▼要件が不明でも必須なもの
• 画面遷移
• 画面
• ダイアログ
• ボタン
▼要件によって必要なもの
• ドラッグアンドドロップ
• グリッドスクローラー(列、行)
• スナップスクローラー(iOSホーム画面)
• etc
UI基盤機能を作る
▼画面設計方針
• 画面用ライフサイクルを作る
• 画面遷移マネージャで各処理を呼ぶ
▼移動前画面
OnDisableStart
OnDisableCoroutine
OnDisableEnd
▼移動後画面
OnEnableStart
OnEnableCoroutine
OnEnableEnd
遷移
UI基盤機能を作る
▼ダイアログ設計方針
• ダイアログ用ライフサイクルを作る
• ダイアログマネージャで各処理を呼ぶ
▼ダイアログ
OnCreate
OnOpen
OnClose
開く
閉じる
UI基盤機能を作る
▼ボタン設計方針
• イベント用のインターフェースを実装
• タッチ、リリース、クリック、長押しを実装
• 外から処理を設定し使用する
• アニメーション、SEは継承クラスで実装
▼ボタン
IPointerClickHandler
IPointerDownHandler
IPointerUpHandler
Update(LongPress)
UI基盤機能を作る
▼意識すべきこと
• プロジェクト固有化しない
• サードパーティ製のアセットありきにしない
→ 別案件でも展開できるくらいの深さ(余計なものを作らない)
→ それより先は継承して作る
UI開発高速化のために行ったこと
A2. デザインのレギュレーション
を決める
デザインのレギュレーションを決める
有象無象なUIデザインが生まれると
有象無象なUI実装が生まれる
デザインのレギュレーションを決める
デザインのレギュレーションを決める
▼デザイナに伝えたUnityのあれこれ
• 9Slice
• Color(乗算)
• SpriteAtlas
• Mask
デザインのレギュレーションを決める
▼9Slice
• ImageのSlice機能を用いて余計な画像を作ってしま
うロスを減らす
• エンジニアがどの素材を使えばいいか悩むロスを減
らす
デザインのレギュレーションを決める
▼Color(乗算)
• 白色画像に色をのせてUIをつくり余計な画像を作っ
てしまうロスを減らす
• プログラムで色を定義することで素材作成でのミス
を減らす
デザインのレギュレーションを決める
▼SpriteAtlas
• パフォーマンス観点で無限に画像素材を増やしたくない理由
の説明(ドローコール、メモリ)
• レギュレーションの指標にする
→ まとめることができるところをまとめる
デザインのレギュレーションを決める
▼Mask
• パフォーマンス観点で修正される可能性のある多用した
くない表現の説明
• Maskを使わない素材の作り方
はじめからMaskされた素材を使う フレームをのせてMaskを使用しないデザインにする
UI開発高速化のために行ったこと
A3. レギュレーションをもとに
Prefab化
レギュレーションをもとにPrefab化
▼本件に必要だったもの
• ダイアログ
• ボタン
• サムネイル
レギュレーションをもとにPrefab化
レイアウトさせる箇所を減らす
(エンジニア、デザイナ問わず)
レギュレーションをもとにPrefab化
Nested Prefabでやりやすくなった
レギュレーションをもとにPrefab化
レギュレーションをもとにPrefab化
AnchorでPrefabを置いた親に合わせて
適切なレイアウトになるように設定する
レギュレーションをもとにPrefab化
AnchorでPrefabを置いた親に合わせて
適切なレイアウトになるように設定する
レギュレーションをもとにPrefab化
AnchorでPrefabを置いた親に合わせて
適切なレイアウトになるように設定する
レギュレーションをもとにPrefab化
UI開発高速化のために行ったこと
▼まとめ
• UI基盤機能を作る
• デザインのレギュレーションを決める
• レギュレーションをもとにPrefab化
UI開発高速化のために行ったこと
▼まとめ
• UI基盤機能を作る
• デザインのレギュレーションを決める
• レギュレーションをもとにPrefab化
→ レイアウトするオブジェクトも
共通化することが重要
UI開発高速化のために行ったこと
▼まとめ
• UI基盤機能を作る
• デザインのレギュレーションを決める
• レギュレーションをもとにPrefab化
→ UIのレギュレーション整備は
UXに好影響
ありがとうございました!

More Related Content

What's hot

Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Yoshifumi Kawai
 

What's hot (20)

【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
 
Unityアニメーションシステムの 今と未来の話
Unityアニメーションシステムの 今と未来の話Unityアニメーションシステムの 今と未来の話
Unityアニメーションシステムの 今と未来の話
 
Riderはいいぞ!
Riderはいいぞ!Riderはいいぞ!
Riderはいいぞ!
 
文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜
文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜
文脈を操る美しきZenjectプロジェクトからの眺め 〜Contextの扱い方と活用方法〜
 
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
 
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
 
若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発
 
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
 
ObserverパターンからはじめるUniRx
ObserverパターンからはじめるUniRx ObserverパターンからはじめるUniRx
ObserverパターンからはじめるUniRx
 
UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!
 
Cinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作るCinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作る
 
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろうUE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
 
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
 
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
 
はじめてのUniRx
はじめてのUniRxはじめてのUniRx
はじめてのUniRx
 
UniRxでMV(R)Pパターン をやってみた
UniRxでMV(R)PパターンをやってみたUniRxでMV(R)Pパターンをやってみた
UniRxでMV(R)Pパターン をやってみた
 
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechcon
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 

Similar to UnityでUI開発を高速化した件

Similar to UnityでUI開発を高速化した件 (20)

スタートアップで培ったアーキテクチャ設計ノウハウ
スタートアップで培ったアーキテクチャ設計ノウハウスタートアップで培ったアーキテクチャ設計ノウハウ
スタートアップで培ったアーキテクチャ設計ノウハウ
 
複数拠点における開発効率の維持・向上
複数拠点における開発効率の維持・向上複数拠点における開発効率の維持・向上
複数拠点における開発効率の維持・向上
 
GitHub Actionsを使ってAPI外部公開時の作業を自動化した話
GitHub Actionsを使ってAPI外部公開時の作業を自動化した話GitHub Actionsを使ってAPI外部公開時の作業を自動化した話
GitHub Actionsを使ってAPI外部公開時の作業を自動化した話
 
Inside CyberAgent's Game Development
Inside CyberAgent's Game DevelopmentInside CyberAgent's Game Development
Inside CyberAgent's Game Development
 
自動運転の会社でなぜデータ基盤が必要なのか?そこで今やっていること
自動運転の会社でなぜデータ基盤が必要なのか?そこで今やっていること自動運転の会社でなぜデータ基盤が必要なのか?そこで今やっていること
自動運転の会社でなぜデータ基盤が必要なのか?そこで今やっていること
 
Agile Testing Night #4 LT
Agile Testing Night #4 LTAgile Testing Night #4 LT
Agile Testing Night #4 LT
 
Unityでこんなことができる KLab×博多Tech塾
Unityでこんなことができる KLab×博多Tech塾Unityでこんなことができる KLab×博多Tech塾
Unityでこんなことができる KLab×博多Tech塾
 
エクストリーム・プログラミング開発におけるUIテスト #yjbonfire
エクストリーム・プログラミング開発におけるUIテスト #yjbonfireエクストリーム・プログラミング開発におけるUIテスト #yjbonfire
エクストリーム・プログラミング開発におけるUIテスト #yjbonfire
 
lt37
lt37lt37
lt37
 
How you can speed up serverless development by local
How you can speed up serverless development by localHow you can speed up serverless development by local
How you can speed up serverless development by local
 
AbemaTVのUIデザイン 僕なりの運用の心得
AbemaTVのUIデザイン 僕なりの運用の心得AbemaTVのUIデザイン 僕なりの運用の心得
AbemaTVのUIデザイン 僕なりの運用の心得
 
自社サービスkintoneをふんだんに活用したサイボウズの開発フロー
自社サービスkintoneをふんだんに活用したサイボウズの開発フロー自社サービスkintoneをふんだんに活用したサイボウズの開発フロー
自社サービスkintoneをふんだんに活用したサイボウズの開発フロー
 
Google Material DesignをPolymerで表現しよう
Google Material DesignをPolymerで表現しようGoogle Material DesignをPolymerで表現しよう
Google Material DesignをPolymerで表現しよう
 
Web App for Containers のデプロイでつまずいた話
Web App for Containers のデプロイでつまずいた話Web App for Containers のデプロイでつまずいた話
Web App for Containers のデプロイでつまずいた話
 
unity build on github actions
unity build on github actionsunity build on github actions
unity build on github actions
 
こだわりのkintone
こだわりのkintoneこだわりのkintone
こだわりのkintone
 
NuxtJS + SSRで作ったGREE Tech Conference 2020
NuxtJS + SSRで作ったGREE Tech Conference 2020NuxtJS + SSRで作ったGREE Tech Conference 2020
NuxtJS + SSRで作ったGREE Tech Conference 2020
 
【CEDEC2016】Ui discussionのススメ uiデザインの品質を効率的に向上させるには
【CEDEC2016】Ui discussionのススメ  uiデザインの品質を効率的に向上させるには【CEDEC2016】Ui discussionのススメ  uiデザインの品質を効率的に向上させるには
【CEDEC2016】Ui discussionのススメ uiデザインの品質を効率的に向上させるには
 
Azure Bot Service で CI/CD on Azure Dev Ops
Azure Bot Service で CI/CD on Azure Dev OpsAzure Bot Service で CI/CD on Azure Dev Ops
Azure Bot Service で CI/CD on Azure Dev Ops
 
Androidエンジニアになってからの1年間の感想と振り返り
Androidエンジニアになってからの1年間の感想と振り返りAndroidエンジニアになってからの1年間の感想と振り返り
Androidエンジニアになってからの1年間の感想と振り返り
 

UnityでUI開発を高速化した件

Editor's Notes

  1. アジェンダ
  2. 入社時からUnityをさわりはじめ現在3本目のUnity製スマホゲームを製作中 LT初登壇なのでおてやわらかに…
  3. 株式会社グレンジで開発中のアクションタイトル 先日CBTを行いリリースに向け絶賛開発中 現在事前登録中なので是非公式サイトをのぞいてみてください
  4. 3Dのキャラを操作し360度飛行しながら4対4で対戦を行うアクションゲーム 様々なキャラクターや多彩なスキルを使用しマルチプレイの対戦を行う 本日は本ゲームのUI開発についてお話させていただきます
  5. そもそもなぜ高速化が必要だったのかという点について説明
  6. 直近のキックフライトのイベント 先日開催したCBTに加えトーキョーゲームショウやニコニコ闘会議への出展など短期のスパンで大きいイベントが立て続けにあった
  7. ユーザにお披露目したTGSまではゲームの本質的な部分(ゲームルールやバトルまわり)の改修に力を入れており闘会議までは新キャラの追加、CBTまでにはAPIやデータの疎通実装など短期間で重要な機能の実装が必要だった 闘会議までは出展ということもありバトルができるところまでで大丈夫だったがCBTではゲームを通しての一連の機能が必要になった
  8. 出展でゲームの本質部分であるインゲームでダイレクトに面白さを感じてもらうためそちらに力をさきたい状況だった UIの実装に手間取らない環境整備をしておかないと間に合わないというスケジュール感
  9. ただUI実装は得意とするところであったので任せてくださいという感じで進めた 何をしたかについて3つのポイントを伝える
  10. Unityのデフォルト機能で補えないコンポーネントのスクリプト作成を行う
  11. 大抵のゲームでは要件が不明でも必要な機能が想像できる 仕様展開が行われる前に先回りして実装することができる これらの機能は資産化するので会社として作っておくことが望まれる 先回りで浮いた時間を使って要件によって必要なものを作る
  12. アニメーションやSEなどプロジェクト固有となりそうな処理は基盤的な機能に含めると別の箇所で使用するにも汎用性がなくなる 余計な機能を増やして作る側も使う側も時間をとらないように必要最低限のものをつくり継承先で機能を増やす Androidのバックキー対応などでもこのような基底機能の存在は開発速度を上げるために重要
  13. デザインの数だけ実装が必要
  14. 左がフォントのレギュレーション、右がカラーのレギュレーション 他にも多々あるがわかりやすい例としてこの2つを載せた デザイナに数を絞り整えていってもらう作業 決まってしまえばプログラムで定義できることが多いので実装もある程度安心できる
  15. デザイナに伝えて理解しておいてもらったほうが良いUnityの機能 実際に使用する素材の書き出し方に関わるのでデザイナにオリエンして理解してもらった
  16. 本件で必要になった共通化できるオブジェクト ゲームを作っていれば同じような感じになると思う
  17. 考慮すべきなのはレイアウトさせる箇所を減らすという点 プロジェクトによってエンジニアがレイアウトしたりデザイナがレイアウトしたりフローは様々だと思うが職種の違いは関係なく人の違いによってレイアウトの精度のブレは出てしまう ここをPrefabでカバーできる設計を目指していくと良い
  18. 以前はレイアウトさせる箇所を減らす設計を目指すためにプログラムでひと手間必要だったがUnity 2018.3から追加されたNested Prefabでやりやすくなったと感じる
  19. シンプルなダイアログを作成する場合の例です
  20. これはダイアログの背景 親に配置するだけでタイトル位置と白い部分のレイアウトが担保される
  21. 閉じるボタン ダイアログ下部からの距離を指定している
  22. ダイアログ内ボタン ダイアログ下部からの距離を指定している
  23. AnchorがつけられたPrefabを配置していき数値をいじることなくレイアウトを完成させる例 レギュレーションを決めたうえで部品を作っておくと配置するだけでレイアウトできる 以前は調整を反映させるためにprefabの参照をもって生成するプログラムを書いたりしていたが Nested Prefabがあることで細かな調整も一斉に反映できるようになった これも高速化につながった
  24. 以上3点がUI開発を高速化させるために行った3つのこと 主にレギュレーションの整備、共通化をキーワードに実装コストを下げていく方針で高速化を行った エンジニアだけで完結しないので骨が折れる作業だが これらの項目はUI実装のクオリティアップのために高速化にかかわらずやったほうがいいこと
  25. エンジニアがプログラムで意識することがある共通化のようなデザインパターンはUI実装でも同じだと思っている 同じものを使い回すことでバグのリスクを減らせるし実装コストも減らせる またレイアウトはデザイナ視点からでしか評価しづらいところなので狙い通りに行かないことがあるのも吸収でき UXの向上につなげることができる
  26. レギュレーションの整備はUXにも繋がる 学習コストやインタラクションのブレがなくなることでユーザー体験の最適化を行うことができる 近年はどの企業さんもゲームのクオリティが高いのでUXの最適化は市場でいっぽぬきんでるためにも捨てがたいところだと思う 以上でまとめとさせていただきます