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.

【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~

4,232 views

Published on

講演者:Florian Andreas Gantzert(KLab株式会社)

こんな人におすすめ
・Unityにおける疎結合テクニックを知りたいエンジニア
・開発ワークフロー改善とつながる「疎結合」を知りたいマネージャー、デザイナー
・プログラミングパターンに興味のある方

受講者が得られる知見
・疎結合設計によるデザイナーとエンジニアのワークフローのメリット
・Unityにおける疎結合テクニック

Published in: Technology

【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~

  1. 1. Unityにおける疎結合設計 2018/5/9 Florian Andreas Gantzert(@TheAndiGantz) KLab株式会社 / エンジニアリングマネージャー
  2. 2. アジェンダ • UI • 結合 • UIアゲイン • 今日のおさらい
  3. 3. UI
  4. 4. UI Unity EditorでゲームUIを
 ビジュアルに作ることができる(uGUI)…
  5. 5. UI …にも関わらず、デザイナではなく
 プログラマがUIを作る
 ケースがある
  6. 6. UI ワークフロー / The Bad UIデザイナ プログラマ アセット
 制作 仕様書
 作成 仕様書
 熟読 UI制作 レビュー
  7. 7. UI ワークフロー / The Bad - スループットが低い - イテレーションが長い - 同時作業ができない - 本来不要なタスクが発生する - 専門外のタスクをこなすことになる
  8. 8. UI ワークフロー / The Good UIデザイナプログラマ アセット
 制作 デザイナ
 サポート UI
 制作 レビュー コード
 最適化 コミュニケーション
  9. 9. UI ワークフロー / The Good - スループットが高い - イテレーションが早い - 同時作業ができる - それぞれの得意分野が活かせる
  10. 10. UI The Goodへの鍵は?
  11. 11. 結合
  12. 12. 結合 結合
 一方の変更によって他方の変更が
 必要となる
  13. 13. 結合 密結合
 結合している状態 疎結合
 結合していない状態
  14. 14. 結合 In English, please! 密結合 分割 結合 疎結合 Loose Coupling Tight Coupling Decoupling Coupling
  15. 15. 結合レベル 結合 結合はコードだけの話ではない
  16. 16. 結合 結合レベル コード データ ワークフロー プログラマ プロジェクト全体 レベル 影響範囲
  17. 17. 結合レベル 結合 コードの結合が データとワークフローの結合に 繋がる
  18. 18. 結合 結合と抽象化 疎結合は抽象化で実現させる
  19. 19. 結合 結合と抽象化 抽象化層分割 疎結合密結合
  20. 20. 結合 結合と抽象化 ワークフロー データ コード 抽象化レベル
  21. 21. 結合 結合と抽象化 抽象化は
 汎用化でも一般化でもない
 
 縛りのないシンプルな抽象化が望ましい
  22. 22. 結合 結合バランス 疎結合にバランスがある
  23. 23. 結合バランス / The Problem 結合 結合のバランスが
 プロジェクトの規模に依存する
  24. 24. 結合バランス / The Problem 結合 - プロジェクト規模とともに要素が
 変化する - 小規模で通用したテクニックが
 裏目に出たりする 規模拡大
  25. 25. 結合 結合バランス / The Problem プロジェクト規模 疎結合 バランス
  26. 26. 結合バランス / The Good 結合 https://en.wikipedia.org/wiki/Trio_(music)#/media/File:Schumann_-_Halir_-_Dechert_Trio.jpg
  27. 27. 結合バランス / The Bad 結合 https://sanskarans.deviantart.com/art/Hydra-616295199
  28. 28. 結合 結合バランス / The Bad 孤立しているタスクが
 - 巨大化する - 副作用が発生する - 対応が複雑になる 孤立した
 タスク!?
  29. 29. 結合 結合バランス / The Solution バランスがズレてもまだ手遅れじゃない
  30. 30. 結合 結合バランス / The Solution バランスの鍵は
 分野相互間コミュニケーショに
 ある
  31. 31. UIアゲイン
  32. 32. UIアゲイン ワークフロー / The Goal UIデザイナプログラマ アセット
 制作 デザイナ
 サポート UI
 制作 レビュー コード
 最適化
  33. 33. UIアゲイン ワークフロー / The Problem - 同時作業によるコンフリクトはありうる - ワークフロー上でそのコンフリクトを阻止できない
  34. 34. UIアゲイン ワークフロー / The Solution - データを分割して、コンフリクトを阻止する - コード上でその分割に対応する
  35. 35. データ分割 UIアゲイン - UI用の独立したUnityシーンを用意する - デザイナがそのシーンを所有する - UIシーンは他のゲーム(シーン)と
 連携させる UIシーン
  36. 36. UIアゲイン データ分割 / The Problem - Unityのシリアライズ機能が使えない!? - UIシーンと他のシーンはどうやって連携させる?
  37. 37. UIアゲイン データ分割 / The Solution - MVC・MVVM(今回は割愛*) - UnityEngine.ExposedReference<T>? - メッセージ・バス *ご興味のある方は、GDC 2017のData Binding Architectures for Rapid UI Creation in Unityがおすすめ
  38. 38. UIアゲイン UnityEngine.ExposedReference<T> - Unity Timelineで利用されている - ランタイム時にIDを使って参照を解決する - ExposedReference<T>本体側でも
 ルックアップテーブルでももIDを管理する
 必要がある
  39. 39. UIアゲイン メッセージ・バス - 必要な情報分だけメッセージとして抽象化し、
 バスに飛ばす - バスの接続先でメッセージを処理する
  40. 40. UIアゲイン メッセージ・バス バス バス 情報元 処理先
  41. 41. UIアゲイン メッセージ・バス / The Good - 処理先・情報元を差し替えることで
 デザイナ向けのデバッグ機能などが
 追加しやすい
  42. 42. 今日のおさらい
  43. 43. 今日のおさらい 結合はコードの話だけではない
 
 データとワークフローでも発生する
  44. 44. 今日のおさらい 規模と共に疎結合が必要になってくる
  45. 45. 今日のおさらい コードの結合は、 データとワークフローの結合に 繋がる
  46. 46. 今日のおさらい 疎結合への道は抽象化で開く
  47. 47. 今日のおさらい コードとデータの疎結合は よりよいワークフローに 繋がる
  48. 48. 今日のおさらい シーンを分けることによって
 Unityにおける同時作業が
 やりやすくなる
  49. 49. 今日のおさらい メッセージ・バスで
 複数のUnityシーンやロジックなどを
 疎結合的に繋げることができる
  50. 50. Thank you! ご静聴ありがとうございました!
  51. 51. Bonus Slides
  52. 52. Roll-a-ball - テストを自動化したい - MLエージェントに遊ばせたい - そのために入力元を差し替えたい!
  53. 53. Roll-a-ball チュートリアルの入力処理 / The Problem
  54. 54. Roll-a-ball チュートリアルの入力処理 / The Solution Unity APIゲームロジック ゲームロジック Unity API 抽象化層 … 改善
  55. 55. Roll-a-ball 入力処理インターフェース化
  56. 56. C#における抽象化 イベント化インターフェース化 処理側が
 タイミングを決める 情報元が
 タイミングを決める
  57. 57. C#におけるイベント化 - 言語レベルで対応している
 (delegate・eventキーワード) - Unity APIでも使われている(UnityEditor.
 EditorApplication.hierarchyChangedなど)
  58. 58. C#におけるイベント化 event vs. メッセージ・バス
 - 接続先は発信元を知っている - 発信元しかイベントを発信で きない - 接続先と情報元はお互いを知 らない - 誰もがイベントを発信できる event メッセージ・バス

×