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
230
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
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
210
gunshi
kazupon
1
140
チームをチームにするEM
hitode909
0
440
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
670
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
350
JETLS.jl ─ A New Language Server for Julia
abap34
2
470
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
310
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
1.6k
dchart: charts from deck markup
ajstarks
3
950
CSC307 Lecture 02
javiergs
PRO
1
760
ゲームの物理 剛体編
fadis
0
400
Patterns of Patterns
denyspoltorak
0
420
Featured
See All Featured
Abbi's Birthday
coloredviolet
0
4.2k
A better future with KSS
kneath
240
18k
Docker and Python
trallard
47
3.7k
HDC tutorial
michielstock
1
310
BBQ
matthewcrist
89
10k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Claude Code のすすめ
schroneko
67
210k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
1
880
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.3k
Everyday Curiosity
cassininazir
0
120
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.2k
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コンテナってなに? なにもわからない
結論 • 型安全にしよう 正しくない書き方をしたらコンパイルエラーにしよう • インターフェースを定義しよう 利用の仕方を定義して、汎用性を高くしよう • コンポーネントを細かく分けよう 一つのコンポーネントは一つの役割にしよう