Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Unityチュートリアルの玉転がしで、設計について考えてみた話
Search
Moosan
August 28, 2019
Programming
0
240
Unityチュートリアルの玉転がしで、設計について考えてみた話
Unityと設計の話
Moosan
August 28, 2019
Tweet
Share
More Decks by Moosan
See All by Moosan
MessagePackについて調べてみた話
moosan
1
140
Other Decks in Programming
See All in Programming
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
330
Gemini for developers
meteatamel
0
100
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
120
dchart: charts from deck markup
ajstarks
3
1k
24時間止められないシステムを守る-医療ITにおけるランサムウェア対策の実際
koukimiura
1
130
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
AIによる開発の民主化を支える コンテキスト管理のこれまでとこれから
mulyu
3
500
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
280
「ブロックテーマでは再現できない」は本当か?
inc2734
0
1k
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
200
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1k
Featured
See All Featured
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
460
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
96
Typedesign – Prime Four
hannesfritz
42
3k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
280
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.6k
How to Talk to Developers About Accessibility
jct
2
140
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
260
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
380
The Language of Interfaces
destraynor
162
26k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
How to Ace a Technical Interview
jacobian
281
24k
Crafting Experiences
bethany
1
53
Transcript
Unityチュートリアルの玉転がしで、 設計についてかんがえてみた話 むーさん
きっかけ 友達「いつも綺麗なコードを心掛けているけど、 Unityやると萎える。」
よくあるやつ(チュートリアルの玉転がし)
関数分けたい 全部FixedUpdateでやってる 関数を分ける
クラスの名前変えたい PlayerController? PlayerMover!
依存度が高い Editorの入力しか受け付けない いろんな入力を同じ方法で受け取れる
インターフェースは利用する側で定義する PlayerがInputに依存している 入力の仕方によって、 依存するものを変えなきゃあいけない いろんな入力を同じ方法で受け取れる
よくあるやつ(チュートリアルの玉転がし)
型安全性が皆無 Playerというタグが存在しなくても、 コンパイルエラーにならない Unityで設定しておかなきゃいけない
汎用性も皆無 プレイヤーじゃないやつもItemをとりたい
Itemが取得されたタイミングがわからない いつItemが取得されたのか Itemが取得されたから何が起こるのか なにもわからない
ちなみにチュートリアルでは 毎フレームItemを全部とってきて 個数をその都度、UIに更新している
こうする Tagの代わりに、IItemGetterという インターフェースを定義する。 これを継承したオブジェクトにぶつ かったとき、そのオブジェクトの コライダーを通知する。
使い方 Itemを継承したクラスにて、 そのアイテムの効果を記述して、 Item.OnGotに登録する。 いろんな効果のItemを作れて便利
デデドン(IObservableってなんだよ)
UniRxでggr Unity用のRxライブラリ C#のRx(リアクティブエクステン ション)がもとになっている Rxとは、Observerパターンが根幹 にある、監視型イベントシステム である UIの構築などにめっちゃ便利!!
試行錯誤の末に
Playerに必要なコンポーネント • PlayerCore • PlayerMover • PlayerInputByKeyBoard • ScoreHolder それぞれは一切依存していないので、
それぞれの部品を好きにつけかえて、 自分だけのプレイヤーを作ることができる
全部自分でつけるの?? 小さいプロジェクトなら自分でやっ てもいいけど、 大規模な開発で、コンポーネントを 一個一個つけるのめんどくさい
Zenjectでggr Unity用の、DIコンテナライブラリ 依存性の注入をする 方法や引き出しを、 大幅に増やしてくれるらしい 最近流行っている(?) テスト書くときも便利
DIコンテナってなに? なにもわからない
結論 • 型安全にしよう 正しくない書き方をしたらコンパイルエラーにしよう • インターフェースを定義しよう 利用の仕方を定義して、汎用性を高くしよう • コンポーネントを細かく分けよう 一つのコンポーネントは一つの役割にしよう