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
240
0
Share
Unityチュートリアルの玉転がしで、設計について考えてみた話
Unityと設計の話
Moosan
August 28, 2019
More Decks by Moosan
See All by Moosan
MessagePackについて調べてみた話
moosan
1
140
Other Decks in Programming
See All in Programming
How We Benchmarked Quarkus: Patterns and anti-patterns
hollycummins
1
140
AWSコミュニティ活動は顧客のクラウド推進に効くのか / Do AWS community activities help customers adopt the cloud?
seike460
PRO
0
140
10 Tips of AWS ~Gen AI on AWS~
licux
5
410
forteeの改修から振り返るPHPerKaigi 2026
muno92
PRO
3
290
CursorとClaudeCodeとCodexとOpenCodeを実際に比較してみた
terisuke
1
470
ハーネスエンジニアリングにどう向き合うか 〜ルールファイルを超えて開発プロセスを設計する〜 / How to approach harness engineering
rkaga
23
13k
The Monolith Strikes Back: Why AI Agents ❤️ Rails Monoliths
serradura
0
340
Liberating Ruby's Parser from Lexer Hacks
ydah
2
1.4k
t *testing.T は どこからやってくるの?
otakakot
1
670
Coding as Prompting Since 2025
ragingwind
0
840
Agentic Elixir
whatyouhide
0
290
HTML-Aware ERB: The Path to Reactive Rendering @ RubyKaigi 2026, Hakodate, Japan
marcoroth
0
150
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
96
14k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
500
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
450
What does AI have to do with Human Rights?
axbom
PRO
1
2.1k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
150
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
270
Docker and Python
trallard
47
3.8k
Typedesign – Prime Four
hannesfritz
42
3k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.4k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
320
A better future with KSS
kneath
240
18k
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コンテナってなに? なにもわからない
結論 • 型安全にしよう 正しくない書き方をしたらコンパイルエラーにしよう • インターフェースを定義しよう 利用の仕方を定義して、汎用性を高くしよう • コンポーネントを細かく分けよう 一つのコンポーネントは一つの役割にしよう