Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Unityチュートリアルの玉転がしで、設計について考えてみた話
Search
Moosan
August 28, 2019
Programming
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Unityチュートリアルの玉転がしで、設計について考えてみた話
Unityと設計の話
Moosan
August 28, 2019
More Decks by Moosan
See All by Moosan
MessagePackについて調べてみた話
moosan
1
150
Other Decks in Programming
See All in Programming
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
220
Event is what happens
moro
2
860
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
110
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
630
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
IBM Bob でAI駆動開発『QC-Playbook』
ichirokano2
0
110
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
100
Next.js: The final boss of Web Performance
guaca
0
280
Featured
See All Featured
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
460
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
270
Making the Leap to Tech Lead
cromwellryan
135
10k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
520
Amusing Abliteration
ianozsvald
1
350
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
Code Review Best Practice
trishagee
74
20k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
The untapped power of vector embeddings
frankvandijk
2
1.9k
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コンテナってなに? なにもわからない
結論 • 型安全にしよう 正しくない書き方をしたらコンパイルエラーにしよう • インターフェースを定義しよう 利用の仕方を定義して、汎用性を高くしよう • コンポーネントを細かく分けよう 一つのコンポーネントは一つの役割にしよう